目次
集合関数
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)