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文は下記のようになります。
グループ化キーの複数指定
グループ化キーは複数指定することもできます。下記のようになります。
例えば「orderinfo」で、ユーザーごと、ISBN番号ごとの注文数合計をとる場合は、
となります。
また、グループ化キーは「SELECT」句に必ず含めなければならないわけではありません。例えば下記のように、ユーザーごとの注文数量合計を出す場合に、ユーザー名を出さないように書いても、SQLの構文上はエラーにはなりません。
但し結果を見てもわかるように、どのデータの集計結果かはわからないので、特殊な使用例と言えるでしょう。