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」変数が一意である場合は、SQLCASE構文に個別のキーワードを直接入れることができます。

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

このようにして、case変数の一意の値はそれぞれ1回だけカウントされます。

列の命名に関するメモですが、選択肢がある場合は、SQLで意味のある単語を使用しないことをお勧めします(つまり、大文字と小文字の代わりに「case_num」を使用します)。

于 2012-05-01T13:19:04.067 に答える
6

サブクエリを使用して、YearsOldケースごとに 1 つのフィールドの人口統計テーブルをフィルター処理できますが、そのケースが異なる年齢の違いに関連している可能性がある場合は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;
于 2012-05-01T13:21:42.693 に答える