talosのプログラミング教室

【基本・応用情報技術者】SQL ~集約関数②~

スポンサーリンク

こんにちは。たろすです。

今回はSQLの集約関数を柔軟に使う方法について説明します。

GROUP BY句

GROUP BY句は行をグループ化して、グループごとに集計を行うようにすることができるものです。

以下のようなテーブルがあるとします。

f:id:talosta:20210703123926p:plain

それに対し、商品コードごとに数量の合計を求めたいときは以下のようにします。

SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード;

このようにすることで以下の結果を得られます。

f:id:talosta:20210703115559p:plain

COALESCE関数

集約関数の引数に指定したカラムがNULLの場合、その行は集計対象となりません。

そうなると集計対象となる行が存在しないグループの集計結果もNULLとなります。

f:id:talosta:20210703121718p:plain

SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード;

f:id:talosta:20210703121741p:plain

このようなときにNULLを表示したくない場合はCOALESCE関数を使用します。

COALESCE関数は引数を二つとります。

一つ目の引数がNULLの場合は二つ目の引数を返し、それ以外は一つ目の引数を返します。

先程のSQLを以下のように変えると、

SELECT 商品コード, COALESCE(SUM(数量), 0) FROM 受注明細 GROUP BY 商品コード;

結果は以下のようになります。

f:id:talosta:20210703123042p:plain

HAVING句

条件で出力を絞るときはWHERE句を使ってきましたが、集約関数の結果を条件として絞りたい場合はHAVING句を使用します。

例えば商品コードごとの合計値が200以上のもののみ出力したい場合、以下のようにします。

SELECT 商品コード, SUM(数量) FROM 受注明細 GROUP BY 商品コード HAVING SUM(数量) > 200;

f:id:talosta:20210703123411p:plain

HAVINGのところをWHEREにするとエラーになってしまうので気をつけてください。

おわりに

今回はSQLのGROUP BY句、COALESCE関数、HAVING句について説明しました。

非常によく問われるので覚えておきましょう。