MySQL – グループ化と集約~GROUP BY

概要

グループ化はGROUP BY文でグループ化する列を指定する。ほとんどの場合、以下のように集約関数を適用する。

SELECT FUNC(col) FROM table GROUP BY col;

上記の分では、table中の列colによってグループ化し、そのグループごとに集約関数FUNC()を適用した結果を返す。

実行例

以下のデータを使う。学生ごとの履修科目と得点のデータのイメージ。

COUNTの例

以下の例では、学生でグルーピングして科目数をカウントしている。これにより、各学生の履修科目数が得られる。

以下の例では、科目でグルーピングして科目数をカウントしている。これにより、各科目の被履修数が得られる。

MIN/MAXの例

以下の例では、科目でグルーピングして点数の最小値と最大値を表示させている。

SELECTsubjectも表示させている。上記の例ではsubjectでグルーピングしているので適切に表示されるが、subjectの値に使われるレコードは不定なので不適切に使うと以下のようになる。

SUM/AVGの例

以下の例では、学生ごとの合計点数と教科ごとの平均点数をグルーピングにより計算している。

HAVING

各科目が履修された数は以下のようだった。

ここで、履修数が2よりも多い科目だけを抽出したいとする。

WHERE句でできそうだがエラーになる。

集約結果によって抽出したい場合は、HAVING句を使う。

WHERE句との組み合わせの例。scoreが80以上の履修数を科目ごとにカウント。

さらに、scoreが80以上の数が1より大きい科目のみHAVING句で取り出す。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です