我有一份报告表,其中包含字段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
?
答案 0 :(得分:9)
如果您的“case”变量是唯一的,您当然可以直接将distinct关键字放在SQL CASE语法中:
Count(distinct CASE when yearsold between 6 and 12 then case else null end)
这样,case变量的每个唯一值只计算一次。
只是关于列命名的说明,如果你有选择的话,我建议不要使用在SQL中有意义的单词(即使用'case_num'代替case)。
答案 1 :(得分:4)
您可以使用子查询来过滤每个案例中单个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;