簡體   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