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`
これらの年齢層のDISTINCTCases
をカウントするようにこれを変更する方法はありますか?
「case」変数が一意である場合は、SQLCASE構文に個別のキーワードを直接入れることができます。
Count(distinct CASE when yearsold between 6 and 12 then case else null end)
このようにして、case変数の一意の値はそれぞれ1回だけカウントされます。
列の命名に関する注意事項ですが、選択肢がある場合は、SQLで意味のあるWordを使用しないことをお勧めします(つまり、caseの代わりに 'case_num'を使用します)。
サブクエリを使用して、ケースごとに1つのYearsOld
フィールドの人口統計テーブルをフィルタリングできますが、そのケースが異なるISR
の年齢の違いに関連している可能性がある場合は、カウントされるだけです。 1つのブラケットで(おそらくこれはあなたが望むものですか?):
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;