広告 SQL

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

集合関数

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

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

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

 

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

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

【itemテーブル】

ID (id) ※PK商品名 (name)価格 (price)カテゴリ (category)
1商品A1980書籍
2商品B4980家具
3商品C7200家具
4商品D500書籍
5商品E980書籍

スポンサーリンク

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