[英]SQL - Select all rows and count only column greater than 1
假设我有这张桌子:
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
。 我怎么能做到这一点?
您想聚合您的行并为每个名称获取一个结果行。 这在 SQL 中转换为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
进行计数: sum(case when value > 0 then 1 else 0 end)
。
在您的示例中只有 0 和 1。如果这些是唯一可能的值,您可以将它们相加:
select name, sum(value)
from mytable
group by name
order by name;
你只是想要聚合吗? 以下查询实际上会为您的示例数据生成正确的结果:
select name, sum(value) sum_value
from mytable
group by name
尝试这个:
SELECT a.name, count(*)*(case when sum(a.value) >= 1 then 1 else 0 end)
FROM table a
GROUP BY name;
为了更好的解决方案,请提供有关 value 列性质的更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.