「GROUP BY」句と集計関数
3.2 「GROUP BY」句と集計関数
「GROUP BY」句を単独で使うことは少なく、集計関数と同時に用いられるのが一般的です。ここでは、「GROUP BY」句と集計関数を組み合わせた使い方を解説します。
3.2.1 「GROUP BY」句とAVG関数
AVG関数は前の章で解説したように平均値を取る関数でしたが、「GROUP BY」句と組み合わせると、グループ化キー毎の平均値を出すことができます。
書式は下記のようになります。
例えば「orderinfo」で、ユーザー毎の平均注文数を出す場合は下記のようになります。
3.2.2 「GROUP BY」句とCOUNT関数
COUNT関数もAVG関数同様、「GROUP BY」句と組み合わせることで、グループ化キーごとの行数を算出することができます。
書式は下記のようになります。
「orderinfo」で、ユーザー毎の行数(この場合は注文回数)を出す場合は下記のようになります。
3.2.3 「GROUP BY」句とSUM関数
次はSUM関数と「GROUP BY」句の組み合わせを見ていきます。
書式は下記のようになります。
今度は「orderinfo」で、ISBN番号ごとの注文数の合計を出して見ましょう。
DML文は下記のようになります。
3.2.4 「GROUP BY」句とMAX関数、MIN関数
今回はMAX関数、MIN関数と「GROUP BY」句の組み合わせを同時に解説します。
書式はMAX関数の場合は、
MIN関数の場合は、
のようになりますが、同じグループ化キーで集計する場合、集計関数は複数指定することができます。
例えば「orderinfo」で、ユーザーごとに最初の注文日と最終注文日を調べてみましょう。
最初の注文日はdate列の最小値を、最終注文日は同じくdate列の最大値を取得することで算出できます。
DML文は下記のようになります。
TIPS
グループ化キーは複数指定することもできます。
下記のようになります。
例えば「orderinfo」で、ユーザーごと、ISBN番号ごとの注文数合計をとる場合は、
となります。
また、グループ化キーは「SELECT」句に必ず含めなければならないわけではありません。
例えば下記のように、ユーザーごとの注文数量合計を出す場合に、ユーザー名を出さないように書いても、SQLの構文上はエラーにはなりません。
但し結果を見てもわかるように、どのデータの集計結果かはわからないので、特殊な使用例と言えるでしょう。