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