繁体   English   中英

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

[英]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

我还想包含Bcount(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM