9

我有一个报告表,其中包括字段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`

有没有办法修改它来计算Cases这些年龄组的 DISTINCT?

4

2 回答 2

9

如果您的“case”变量是唯一的,您当然可以将 distinct 关键字直接放在 SQL CASE 语法中:

Count(distinct CASE when yearsold between 6 and 12 then case else null end)

这样,case 变量的每个唯一值只计算一次。

只是关于列命名的注释,如果您有选择的话,我建议不要使用在 SQL 中有意义的词(即使用“case_num”而不是 case)。

于 2012-05-01T13:19:04.067 回答
6

您可以使用子查询为每个案例的单个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;
于 2012-05-01T13:21:42.693 回答