SQL

【SQL】GROUP BY句の使い方(グループ化)

集合関数

SQLには次のような集合関数が用意されています。

関数 説明
MAX(列名) その列の最大値を求める
MIN(列名) その列の最小値を求める
AVG(列名) その列の平均値を求める
SUM(列名) その列の合計を求める
COUNT(*) 行数を求める

GROUP BY句を使用することで、同じ値同士のデータをグループ化、そして集合関数を使いグループごとに集計することができます。

 

本記事では、GROUP BY句を使用したグループ化、そして集合関数を使った集計のやり方について解説しています。

また「itemテーブル」には、次のようなデータが格納されていることを前提としています。

【itemテーブル】

ID (id) ※PK 商品名 (name) 価格 (price) カテゴリ (category)
1 商品A 1980 書籍
2 商品B 4980 家具
3 商品C 7200 家具
4 商品D 500 書籍
5 商品E 980 書籍

スポンサーリンク

GROUP BY句の使い方

SQLの「GROUP BY」を使用することで、同じ値同士のデータをグループ化できます。

GROUP BY句の基本構文

SELECT  列名  FROM  テーブル名  GROUP BY  列名

グループ(GROUP BY)ごとの最大値(MAX)と最小値(MIN)を求める

GROUP BY句を用いてグループ化、そしてMAX関数とMIN関数を使用することで、グループごとの最大値と最小値を求めることができます。

次の例では、カテゴリ (category)でグループ化し、グループごとの"価格の最大値"と"価格の最小値"を求めています。

■GROUP BYを用いたMAXとMINの使用例

SELECT
    category AS 'カテゴリ'
    , MAX(price) AS '最大'
    , MIN(price) AS '最小'
FROM
    item
GROUP BY
    category;

■実行結果

+----------+------+------+
| カテゴリ | 最大 | 最小 |
+----------+------+------+
| 書籍     | 1980 |  500 |
| 家具     | 7200 | 4980 |
+----------+------+------+
2 rows in set (0.01 sec)

グループ(GROUP BY)ごとの平均値(AVG)を求める

GROUP BY句を用いてグループ化、そしてAVG関数を使用することで、グループごとの平均値を求めることができます。

次の例では、カテゴリ (category)でグループ化し、グループごとの"価格の平均値"を求めています。

■GROUP BYを用いたAVGの使用例

SELECT
    category AS 'カテゴリ'
    , AVG(price) AS '平均値'
FROM
    item
GROUP BY
    category;

■実行結果

+----------+-----------+
| カテゴリ | 平均値    |
+----------+-----------+
| 書籍     | 1153.3333 |
| 家具     | 6090.0000 |
+----------+-----------+
2 rows in set (0.00 sec)

グループ(GROUP BY)ごとの合計(SUM)を求める

GROUP BY句を用いてグループ化、そしてSUM関数を使用することで、グループごとの合計を求めることができます。

次の例では、カテゴリ (category)でグループ化し、グループごとの"価格の合計"を求めています。

■GROUP BYを用いたSUMの使用例

SELECT
    category AS 'カテゴリ'
    , SUM(price) AS '合計'
FROM
    item
GROUP BY
    category;

■実行結果

+----------+-------+
| カテゴリ | 合計  |
+----------+-------+
| 書籍     |  3460 |
| 家具     | 12180 |
+----------+-------+
2 rows in set (0.00 sec)

グループ(GROUP BY)ごとの行数(COUNT)を求める

GROUP BY句を用いてグループ化、そしてCOUNT関数を使用することで、グループごとの行数を求めることができます。

次の例では、カテゴリ (category)でグループ化し、グループごとの行数を求めています。

■GROUP BYを用いたCOUNTの使用例

SELECT
    category AS 'カテゴリ'
    , COUNT(*) AS '行数'
FROM
    item
GROUP BY
    category;

■実行結果

+----------+------+
| カテゴリ | 行数 |
+----------+------+
| 書籍     |    3 |
| 家具     |    2 |
+----------+------+
2 rows in set (0.00 sec)

helpful