[英]DISTINCT COUNT in SELECT CASE SQL
我有一份報告表,其中包括Case
(唯一編號), ISR
(個人安全報告 - 唯一編號)和YearsOld
。
每個案例可以有多個ISR。 我想計算年齡組中唯一案例的數量。
這個SQL給了我一個ISR數量的計數:
SELECT
COUNT(CASE WHEN `YearsOld` = -2) THEN 1 END) `No Report`,
COUNT(CASE WHEN `YearsOld` BETWEEN 0 AND 5) THEN 1 END) `0 to 5`
COUNT(CASE WHEN `YearsOld` BETWEEN 6 AND 12) THEN 1 END) `6 to 12`
FROM `Demographics`
有沒有辦法修改這個來計算這些年齡組的DISTINCT Cases
?
如果您的“case”變量是唯一的,您當然可以直接將distinct關鍵字放在SQL CASE語法中:
Count(distinct CASE when yearsold between 6 and 12 then case else null end)
這樣,case變量的每個唯一值只計算一次。
只是關於列命名的注釋,如果你有選擇的話,我建議不要使用在SQL中有意義的單詞(即使用'case_num'而不是case)。
您可以使用子查詢來過濾每個案例的單個YearsOld
字段的人口統計表,但如果這種情況可能與不同ISR
差異年齡相關,那么它最終只會被計入一個括號中(也許這就是您想要的?):
SELECT
... -- as you currently have
FROM (
SELECT `Case`, `YearsOld` from `Demographics` GROUP BY `Case`
) t;
或者,為了“計算”每個括號內的每個“不同”“案例”,您確實按字面意思:
SELECT
COUNT(DISTINCT CASE WHEN `YearsOld` = -2 THEN 1 END) `No Report`,
COUNT(DISTINCT CASE WHEN `YearsOld` BETWEEN 0 AND 5 THEN `Case` END) `0 to 5`,
COUNT(DISTINCT CASE WHEN `YearsOld` BETWEEN 6 AND 12 THEN `Case` END) `6 to 12`
FROM Demographics;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.