SQL問題 年代別のレコード数を集計する

問題:nyumon2_ customer2で年代別のレコード数を集計する。年代は10歳刻みで20~79歳は「〇〇代」、それ以外は「不明」とすること。また、年代で並び替えておくこと。

利用テーブルはnyumon2_customer2 。 使い方はSQL学習用サンプルデータを参照。

CASE文の基本的な使い方を見直そう。

解答: 20代2人、30代3人、40代1人、70代2人、範囲外4人

解説:性別と合わせて良く使う集計の1つ。

例えば30代ならばage>30 AND age<39でも書けるが、CASE文は最初に該当した値を取ることを利用すればもう少しすっきりしたコードになる(その場合は最初に範囲外の処理を入れることを忘れずに)。


SELECT CASE WHEN age < 20 THEN '範囲外’
WHEN age < 30 THEN ’20代’
WHEN age < 40 THEN ’30代’
WHEN age < 50 THEN ’40代’
WHEN age < 60 THEN ’50代’
WHEN age < 60 THEN ’60代’
WHEN age < 60 THEN ’70代’
ELSE '範囲外’ END nendai
, count(id)
FROM `nyumon2_customer2`
WHERE is_deleted IS FALSE
GROUP BY nendai
ORDER BY nendai

なお依頼を受ける際に「ここにデータがあるから」と言われたからと単純に集計するだけではなく
・年齢の範囲。一定年齢層以外は不要なのでまとめたり除外したり
・年齢の刻み。5歳刻みが希望だったり、60歳以上はひとまとめにしたり
・削除済み会員の扱い
など先に確認すべきことに注意しよう。二度手間になるし、単にテーブルを集計するだけならだれでもすぐにできるようになる。

SQL問題一覧はこちら

SQL問題

Posted by shinu