【SQL】グループ化して表示
GROUP BY
SELECTで取得したレコードを、指定されたカラムの値ごとにグループ化して表示する。
SELECT COMIC, COUNT(COMIC) FROM movies GROUP BY COMIC ORDER BY COUNT(COMIC) DESC;
moviesテーブルのCOMICごとの件数をカウントし、件数の多い順に表示する。
集計関数
グループごとに集計し、1つの値を返す関数。
- AVG 平均値
- COUNT レコード数
- MAX 最大値
- MIN 最小値
- SUM 合計
WHERE区の比較条件として集計関数を使うことはできない。
選択リストの制約
グループ化を行う場合、選択リストで許可されるのは、グループ化のキーとなる列名か、集合関数のみである。
SELECT B.CATOGORYID, MAX(C.CATEGORYNAME) AS カテゴリ名, SUM(A.QUANTITY) AS 数量合計 FROM sales AS A JOIN products AS B ON A.PRODUCTID = B.PRODUCTID JOIN categories AS C ON B.CATEGORYID = C.CATEGORYID GROUP BY B.CATEGORYID;
カテゴリIDに対してカテゴリ名は一意に決まるが、上記の制約のため、MAX関数を用いている。
HAVING
GROUP BYとHAVINGの組み合わせにより、グループのうちさらに条件にあったもののみ表示することができる。
SELECT COMIC, AVG(CHARGE) FROM movies GROUP BY COMIC HAVING AVG(CHARGE) > 80;
CHARGEのグループ平均値が80より大きいグループだけを表示する。