SQL 指南書集 目次 - ray88’s diary
【事例】県別の人口を保持するテーブルに性別を付け加えたテーブルから
男女別・県別の人数の合計を求める
【サンプルコード1】
以下は素人が書いた場合のSQL。2回に分けて男性の人口・女性の人口を抽出し、
そのあとにホスト言語やアプリケーション側(Excelなど)でクロス表形式に整形する
--男性の人口 SELECT pref_name, SUM(population) FROM popTbl2 WHERE sex = '1' GROUP BY pref_name; --女性の人口 SELECT pref_name, SUM(population) FROM popTbl2 WHERE sex = '2' GROUP BY pref_name;
【サンプルコード2】
以下はプロの書いたSQL
「行持ち」のデータから「列持ち」データに水平展開して
クロス集計形式で結果が出力される
このテクニックはSUMに限らず集計関数であればAVGやCOUNTでも同様に使える
WHERE句でWHERE句で条件分岐させるのは素人。プロはSELECT句で分岐させる
SELECT pref_name, --男性の人口 SUM(CASE WHEN sex = '1' THEN population ELSE 0 END) AS cnt_m, --女性の人口 SUM(CASE WHEN sex = '2' THEN population ELSE 0 END) AS cnt_f FROM popTbl2 GROUP BY pref_name ORDER BY pref_name;