データをグループ化する(GROUP BY句)
GROUP BY 句を使用すると指定したカラムの値を基準にデータをグループ化することができます。グループ化することでデータの数を数える COUNT 関数やデータの平均を計算する AVG 関数をグループ毎に行うことができます。ここでは MariaDB でGROUP BY 句を使ってデータをグループ化する方法について解説します。
(Last modified: )
目次
データをグループ化する
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);
作成したテーブルに次のようなデータを追加しました。
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);
最初に name カラムの値を基準にグループ化を行います。次のように実行してください。
select name from report group by name;
name カラムの値が同じデータは同じグループとしてまとめられるので、 name カラムの値が重複していないデータを取得することができました。
次にに name カラムと color カラムの組み合わせを基準としてグループ化を行います。次のように実行してください。
select name, color from report group by name, color;
今度は name カラムと color カラムの値の組み合わせが同じデータは同じグループとしてまとめられるので、組み合わせの値が重複していないデータを取得することができました。
また sum 関数などと組み合わせることで、指定したカラム毎にデータをグループ化した上でデータを集計することができます。例として name カラムの値を基準としてグループ化を行い、グループ毎に sales カラムの値を集計してみます。次のように実行してください。
select name, sum(sales) from report group by name;
name カラムの値毎に sales カラムの値を集計したデータを取得することができました。
なお グループ化してデータの集計を行うときに WITH ROLLUP 修飾子を付けると、グループ毎に集計したデータをすべて集計したデータをあわせて取得することができます。次のように実行してください。
select name, sum(sales) from report group by name with rollup;
name カラムの値毎に sales カラムの値を集計したデータを取得すると同時に、集計したデータをすべて合計したデータをあわせて取得することができました。
-- --
MariaDB でGROUP BY 句を使ってデータをグループ化する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。