GROUP BY

集計関数

データの集まりに対して行う演算を指定することができる。集計演算と呼ぶ。

例: 曲目一覧の曲数を表示する。

SELECT ジャンル,COUNT(*) FROM 曲目一覧;

集計関数の種類は前回も示した。それ以外のものを含め、完全なリストは下記の11通りである。このうちCOUNT(*)とCOUNT(x)、VAR(x)とVARP(x)は等価なので、機能としては9種類が利用できる。

COUNT(*) データ数
COUNT(x) データ数
AVG(x) xの平均値
MAX(x) xの最大値
MIN(x) xの最小値
SUM(x) xの合計
FIRST(x) 最初の値
LAST(x) 最後の値
STDEV(x) 標準編纂
VAR(x) 分散
VARP(x) 分散

GROUP

WHERE 節の後にGROUPを指定することで、同じフィールド値を持つレコードをグループにまとめ、それらについて集計関数を使うことができる。

たとえば以下のようなテーブルについて考える

G1
氏名 学期 科目 成績
小林一子 前期 数学 93
加藤次郎 前期 数学 42
鈴木三郎 前期 数学 54
小林一子 前期 英語 56
加藤次郎 前期 英語 79
鈴木三郎 前期 英語 77
小林一子 後期 数学 49
加藤次郎 後期 数学 45
鈴木三郎 後期 数学 49
小林一子 後期 英語 68
加藤次郎 後期 英語 97
鈴木三郎 後期 英語 71

このテーブルに対し以下のようなクエリが可能である。

例1: 各学生の全成績の平均点を出力する。

SELECT AVG(成績) FROM G1 GROUP BY 氏名;

例1: 各科目の最高得点を出力する。

SELECT MAX(成績) FROM G1 GROUP BY 科目;

例1: 各学期の成績の分散を出力する。

SELECT STDEV(成績) FROM G1 GROUP BY 学期;

例4: 各科目で 80点以上の学生の人数を出力する。

SELECT COUNT(*) FROM G1 WHERE 成績>=80 GROUP BY 科目;

Group Byの動作イメージ

Group Byはわかりにくい機能なので、以下でイメージを示す。

<動作イメージ説明>