SQL-选择所有行并仅计算大于1的列

时间:2019-12-09 16:09:43

标签: mysql sql group-by

假设我有这张桌子:

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。我该怎么做?

3 个答案:

答案 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;

要获得更好的解决方案,请提供有关值列性质的更多详细信息