假设我有这张桌子:
name| value
----|------
A | 0
B | 0
A | 1
C | 1
A | 1
我要选择的结果是这样的:
A | 2
B | 0
C | 1
在第一阶段,我尝试过:
SELECT name, count(0)
FROM table
WHERE value > 0
GROUP BY name;
哪个结果
A | 2
C | 1
我也想在B
中加入count(0) = 0
。我该怎么做?
答案 0 :(得分:3)
您要汇总行并为每个名称获得一个结果行。这在SQL中转换为std::mutex
。对于计数,请使用GROUP BY name
,在内部使用COUNT
决定要计数的内容。
CASE WHEN
之所以可行,是因为select name, count(case when value > 0 then 1 end)
from mytable
group by name
order by name;
仅计算非空出现的次数。我们也可以使用COUNT
来计数:SUM
。
在您的示例中,只有0和1。如果只有这些值,则可以将它们加起来:
sum(case when value > 0 then 1 else 0 end)
答案 1 :(得分:2)
您只想聚合吗?以下查询实际上将为您的样本数据产生正确的结果:
select name, sum(value) sum_value
from mytable
group by name
答案 2 :(得分:1)
尝试一下:
SELECT a.name, count(*)*(case when sum(a.value) >= 1 then 1 else 0 end)
FROM table a
GROUP BY name;
要获得更好的解决方案,请提供有关值列性质的更多详细信息