東京都で開催する「初心者向けデータベース設計入門」講座です。

3.2 「GROUP BY」句と集計関数

「GROUP BY」句と集計関数

3.2 「GROUP BY」句と集計関数

 「GROUP BY」句を単独で使うことは少なく、集計関数と同時に用いられるのが一般的です。ここでは、「GROUP BY」句と集計関数を組み合わせた使い方を解説します。

3.2.1 「GROUP BY」句とAVG関数

 AVG関数は前の章で解説したように平均値を取る関数でしたが、「GROUP BY」句と組み合わせると、グループ化キー毎の平均値を出すことができます。
書式は下記のようになります。

    SELECT グループ化キー,AVG(列名) FROM テーブル名 GROUP BY グループ化キー;

 例えば「orderinfo」で、ユーザー毎の平均注文数を出す場合は下記のようになります。

    SELECT user,AVG(quantity) FROM orderinfo GROUP BY user;


3.2.2 「GROUP BY」句とCOUNT関数

 COUNT関数もAVG関数同様、「GROUP BY」句と組み合わせることで、グループ化キーごとの行数を算出することができます。
 書式は下記のようになります。

    SELECT グループ化キー,COUNT(列名) FROM テーブル名 GROUP BY グループ化キー;

 「orderinfo」で、ユーザー毎の行数(この場合は注文回数)を出す場合は下記のようになります。

    SELECT user,COUNT(orderno) FROM orderinfo GROUP BY user;

3.2.3 「GROUP BY」句とSUM関数

 次はSUM関数と「GROUP BY」句の組み合わせを見ていきます。
 書式は下記のようになります。

    SELECT グループ化キー,COUNT(列名) FROM テーブル名 GROUP BY グループ化キー;

 今度は「orderinfo」で、ISBN番号ごとの注文数の合計を出して見ましょう。
 DML文は下記のようになります。

    SELECT isbn,SUM(quantity) FROM orderinfo GROUP BY isbn;

3.2.4 「GROUP BY」句とMAX関数、MIN関数

 今回はMAX関数、MIN関数と「GROUP BY」句の組み合わせを同時に解説します。
書式はMAX関数の場合は、

    SELECT グループ化キー,MAX(列名) FROM テーブル名 GROUP BY グループ化キー;

 MIN関数の場合は、

    SELECT グループ化キー,MIN(列名) FROM テーブル名 GROUP BY グループ化キー;

 のようになりますが、同じグループ化キーで集計する場合、集計関数は複数指定することができます。
 例えば「orderinfo」で、ユーザーごとに最初の注文日と最終注文日を調べてみましょう。
 最初の注文日はdate列の最小値を、最終注文日は同じくdate列の最大値を取得することで算出できます。
 DML文は下記のようになります。

    SELECT user,MIN(date),MAX(date) FROM orderinfo GROUP BY user;

 TIPS
 グループ化キーは複数指定することもできます。
 下記のようになります。

   SELECT グループ化キー1, グループ化キー2・・・,集計関数(列名) FROM テーブル名
   GROUP BY グループ化キー1, グループ化キー2・・・;

 例えば「orderinfo」で、ユーザーごと、ISBN番号ごとの注文数合計をとる場合は、

   SELECT user,isbn,SUM(quantity) FROM orderinfo GROUP BY user,isbn;

となります。

 また、グループ化キーは「SELECT」句に必ず含めなければならないわけではありません。
例えば下記のように、ユーザーごとの注文数量合計を出す場合に、ユーザー名を出さないように書いても、SQLの構文上はエラーにはなりません。

   SELECT SUM(quantity) FROM orderinfo GROUP BY user;

 但し結果を見てもわかるように、どのデータの集計結果かはわからないので、特殊な使用例と言えるでしょう。

NEXT>> 3.3 「GROUP BY」句と「HAVING」句

セミナー一覧

法人向けプログラミング研修

Java、PHPの社員研修|新人研修
セミナー講師紹介

主席インストラクター
早稲田大学大学院 理工学部卒業
SanJose 州立大学、コンピューター工学部卒業
アメリカのシリコンバレーでは、プログラマー・SEとして活躍
講師の詳細はこちら

PAGETOP
Copyright © 2016 FusionOne Co.,Ltd. All rights reserved.