我在下面的表中输入了3组,我将计算没有的组数(TaskId = 4),我该如何实现?
SetId TaskId
1 0
1 1
1 4
2 0
2 2
2 3
3 0
3 2
3 4
答案 0 :(得分:3)
使用条件聚合:
SELECT SetId
FROM yourTable
GROUP BY SetId
HAVING SUM(CASE WHEN TaskId = 4 THEN 1 ELSE 0 END) = 0;
这里的基本思想是扫描每个SetId
组记录,并计算TaskId
值为4的次数。 HAVING
子句仅保留从不发生4值的组。
答案 1 :(得分:0)
使用CASE
表达式检查TaskId
值是否为4.并使用SUM
函数进行分组SetId
。
<强>查询强>
select [SetId],
SUM(case [TaskId] when 4 then 0 else 1 end) as [sum]
from [your_table_name]
group by [SetId];
答案 2 :(得分:0)
我认为你正在寻找像
这样的东西SELECT *
FROM mytable t1
WHERE t1.SetId NOT IN (SELECT t2.SetId FROM mytable t2 WHERE t2.TaskId = 4)
(选择没有TaskId = 4的完整集)
或
SELECT distinct SetId
FROM mytable t1
WHERE t1.SetId NOT IN (SELECT t2.SetId FROM mytable t2 WHERE t2.TaskId = 4)
(仅选择没有TaskId = 4的SetIds)