【基本・応用情報技術者】SQL ~集約関数②~
スポンサーリンク
こんにちは。たろすです。
今回はSQLの集約関数を柔軟に使う方法について説明します。
GROUP BY句
GROUP BY句は行をグループ化して、グループごとに集計を行うようにすることができるものです。
以下のようなテーブルがあるとします。
それに対し、商品コードごとに数量の合計を求めたいときは以下のようにします。
SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード;
このようにすることで以下の結果を得られます。
COALESCE関数
集約関数の引数に指定したカラムがNULLの場合、その行は集計対象となりません。
そうなると集計対象となる行が存在しないグループの集計結果もNULLとなります。
SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード;
このようなときにNULLを表示したくない場合はCOALESCE関数を使用します。
COALESCE関数は引数を二つとります。
一つ目の引数がNULLの場合は二つ目の引数を返し、それ以外は一つ目の引数を返します。
先程のSQLを以下のように変えると、
SELECT 商品コード, COALESCE(SUM(数量), 0) FROM 受注明細 GROUP BY 商品コード;
結果は以下のようになります。
HAVING句
条件で出力を絞るときはWHERE句を使ってきましたが、集約関数の結果を条件として絞りたい場合はHAVING句を使用します。
例えば商品コードごとの合計値が200以上のもののみ出力したい場合、以下のようにします。
SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード HAVING SUM(数量) > 200;
HAVINGのところをWHEREにするとエラーになってしまうので気をつけてください。