データをグループ化する(GROUP BY句)

広告

GROUP BY 句を使用すると指定したカラムの値を基準にデータをグループ化することができます。グループ化することでデータの数を数える COUNT 関数やデータの平均を計算する AVG 関数をグループ毎に行うことができます。ここでは MariaDB でGROUP BY 句を使ってデータをグループ化する方法について解説します。

(2021 年 08 月 17 日公開 / 2021 年 08 月 17 日更新)

データをグループ化する

GROUP BY 句を使用することで SELECT 文でデータを取得する時に指定したカラム名の値を基準にグループ化することができます。次のように使います。

SELECT col_name [, col_name ...]
  FROM table_references
  GROUP BY {col_name | expr | position} [ASC | DESC]

GROUP BY 句の後に指定したカラム名の値が同じデータをグループとしてまとめます。複数のカラム名を指定した場合には、カラムの値の組み合わせが同じデータをグループとしてまとめます。

それでは実際に試してみます。次のようなテーブルを作成しました。

create table report (name varchar(10), color varchar(10), sales int);

データをグループ化する(1)

作成したテーブルに次のようなデータを追加しました。

insert into report values ('PC', 'Black', 4500);
insert into report values ('Mobile', 'White', 3800);
insert into report values ('PC', 'White', 5100);
insert into report values ('PC', 'Black', 4600);
insert into report values ('Mobile', 'Black', 3900);
insert into report values ('Mobile', 'White', 4200);

データをグループ化する(2)

最初に name カラムの値を基準にグループ化を行います。次のように実行してください。

select name from report group by name;

データをグループ化する(3)

name カラムの値が同じデータは同じグループとしてまとめられるので、 name カラムの値が重複していないデータを取得することができました。

次にに name カラムと color カラムの組み合わせを基準としてグループ化を行います。次のように実行してください。

select name, color from report group by name, color;

データをグループ化する(4)

今度は name カラムと color カラムの値の組み合わせが同じデータは同じグループとしてまとめられるので、組み合わせの値が重複していないデータを取得することができました。

また sum 関数などと組み合わせることで、指定したカラム毎にデータをグループ化した上でデータを集計することができます。例として name カラムの値を基準としてグループ化を行い、グループ毎に sales カラムの値を集計してみます。次のように実行してください。

select name, sum(sales) from report group by name;

データをグループ化する(5)

name カラムの値毎に sales カラムの値を集計したデータを取得することができました。

なお グループ化してデータの集計を行うときに WITH ROLLUP 修飾子を付けると、グループ毎に集計したデータをすべて集計したデータをあわせて取得することができます。次のように実行してください。

select name, sum(sales) from report group by name with rollup;

データをグループ化する(6)

name カラムの値毎に sales カラムの値を集計したデータを取得すると同時に、集計したデータをすべて合計したデータをあわせて取得することができました。

-- --

MariaDB でGROUP BY 句を使ってデータをグループ化する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。