我已经有了解决这个问题的答案,但找不到合适的答案,而且我是SQL的新手。
我有一个包含活动团队的表格,在其他列中我有team_member_1
,team_member_2
,team_member_3
,team_member_4
,team_member_5
。每个人都会存储该团队成员的名称,每个团队的成员数量不同(3到5人之间)。
我正在尝试通过计算该行/团队中的列/字段数NOT NULL
来计算团队中的人数。
如果我的头脑会这样:
Select Count NOT NULL team_member_1, team_member_2, team_member_3,
team_member_4, team_member_5
from Teams
where team_id = 5
当然这不起作用。然后我想把这个数字乘以20英镑(因为活动费用是每人20英镑),给我每个团队所欠的金额,这将在网站上反映出来。希望一切都有道理。
答案 0 :(得分:3)
如果您的服务器产品支持布尔数据类型,并且在适当的上下文中隐式将其转换为整数,例如MySQL,那么您可以尝试以下模式:
SELECT
(team_member_1 IS NOT NULL) +
(team_member_2 IS NOT NULL) +
(team_member_3 IS NOT NULL) +
(team_member_4 IS NOT NULL) +
(team_member_5 IS NOT NULL) AS MemberCount
FROM Teams
WHERE team_id = 5
答案 1 :(得分:2)
你应该有一个关系表TeamMember - >团队关系为1:n \ n:n。
然后在您的查询中加入两个表,由团队分组并计算团队成员。
select t.Id, count(tm.Id)
from teams t, teams_members tm
where t.Id = tm.Team_Id
group by t.Id
答案 2 :(得分:1)
首先,我会normalize数据库。如果这样做,您关于团队成员数量的问题就很简单SELECT COUNT(*) ...
为团队制作一张桌子,为会员制作一张桌子,为团队成员与团队“连接”。
答案 3 :(得分:1)
解决问题的关键是使用特定的if函数
对于Oracle,它可能是DECODE。
SELECT
DECODE(COL1, null, 0, 1) +
DECODE(COL2, null, 0, 1) +
DECODE(COL3, null, 0, 1) +
DECODE(COL4, null, 0, 1) AS Result
FROM YOUR_TABLE
对于MySQL,它可能是IF。
SELECT
IF(COL1 is null, 0, 1) +
IF(COL2 is null, 0, 1) +
IF(COL3 is null, 0, 1) +
IF(COL4 is null, 0, 1) AS Result
FROM YOUR_TABLE
我使用的是SQL Server,您应该使用CASE语句
SELECT
CASE COL1 WHEN IS NULL THEN 0 ELSE 1 END +
CASE COL2 WHEN IS NULL THEN 0 ELSE 1 END +
CASE COL3 WHEN IS NULL THEN 0 ELSE 1 END
FROM YOUR_TABLE
答案 4 :(得分:-1)
正如其他人所指出的,这是一个糟糕的设计,你应该尝试规范化。但是,我会尝试这样的事情:
Select Count(*) from teams where
(team_id = 5) and
(team_member_1 is not null or
team_member_2 is not null or
team_member_3 is not null or
team_member_4 is not null or
team_member_5 is not null)
您应该通过创建一个Team表和一个Member表以及引用Team的成员来至少规范化到第一个普通表单。