我有1个字段参与,返回类型为一个位,在我的数据库中我想总结所有位并创建一个新列。目前它的工作原理,但我得到错误的数据。
SELECT ID, Participation......,SUM(CASE WHEN NoOfParticipation = 1 THEN 1 ELSE 0 END)
AS NoOfParticipation1, SUM(CASE WHEN NoOfParticipation = 0 THEN 1 ELSE 0 END)
AS NoOfParticipation0 from table1 INNER JOIN table2 on ID=ID
group by ID, Participation ......;
这些是我数据库中的记录:
ID||Participation
1 0
1 0
1 0
我正在寻找类似的东西:
ID||Participation||NoOfParticipation1 ||NoOfParticipation0
1 0 0 3
但目前我得到了:
ID||Participation||NoOfParticipation1 ||NoOfParticipation0
1 0 0 1 - this should be 3
. - further down the list i have records with the same ID
.
1 0 0 1
1 0 0 1
答案 0 :(得分:0)
如果每个ID只需要一行,则不应按其他列进行分组:
SELECT id,
Sum(CASE
WHEN participation = 1 THEN 1
ELSE 0
END) AS NoOfParticipation1,
Sum(CASE
WHEN participation = 0 THEN 1
ELSE 0
END) AS NoOfParticipation0
FROM table1
INNER JOIN table2
ON id = id
GROUP BY id
答案 1 :(得分:0)
您不应在Participation
中加入GROUP BY
,而应使用SUM
,MAX
或MIN
等汇总功能。哟没有在你的问题中说明你想要哪一个,我只会使用MAX
:
SELECT ID,
MAX(Participation) as Participation,
SUM(CASE WHEN NoOfParticipation = 1 THEN 1 ELSE 0 END) AS NoOfParticipation1,
SUM(CASE WHEN NoOfParticipation = 0 THEN 1 ELSE 0 END) AS NoOfParticipation0
from table1 INNER JOIN table2 on table1.ID = table2.ID
group by ID;
如果您在ID
中使用Participation
和group by
,则每个不同的ID
和Participation
值组合会得到不同的行。我理解您的问题的方式是您希望每个ID
的结果中包含一行。因此,这必须是GROUP BY
中的唯一列,并且必须对所有其他列使用聚合函数。