【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より大きいグループだけを表示する。