【MySQL】値が同じデータをグループ化する(group by の使い方)

カラムの値が同じデータをグループ化するには「GROUP BY」句を使います。

ここでは MySQLコマンド「GROUP BY」の具体的な使い方を解説していきます。

 

「GROUP BY」の基本

「GROUP BY」は、「SELECT」などと組み合わせて使います。

 

以下は「SELECT」文と組み合わせて使った場合の例。

これで指定したカラムの値が同じデータをグループ化できます。

SELECT カラム名 FROM テーブル名 GROUP BY カラム名;
メモ

SELECT 文の詳しい使い方はこちら

 

データをグループ化する

実際にMySQLサーバーに接続し、動作を確認してみましょう。

 

あらかじめ「test」データベースの「users」テーブルに、以下のようにデータが保存されている例で進めていきます。

name gender
age
佐藤 man 21
鈴木 woman 25
田中 woman 21
山田 man 32
吉田 man 32

データを保存するコマンド例

CREATE DATABASE test;
USE test;
CREATE TABLE users (name VARCHAR(100), gender VARCHAR(100), age INT);
INSERT INTO users (name, gender, age) VALUES ('佐藤', 'man', 21);
INSERT INTO users (name, gender, age) VALUES ('鈴木', 'woman', 25);
INSERT INTO users (name, gender, age) VALUES ('田中', 'woman', 21);
INSERT INTO users (name, gender, age) VALUES ('山田', 'man', 32);
INSERT INTO users (name, gender, age) VALUES ('吉田', 'man', 32);
メモ

CREATE DATABASE 文の詳しい使い方はこちら

USE 文の詳しい使い方はこちら

CREATE TABLE 文の詳しい使い方はこちら

INSERT INTO 文の詳しい使い方はこちら

 

それでは「gender」カラムの値でデータをグループ化してみましょう。コマンドは以下。

SELECT gender FROM users GROUP BY gender;

 

コマンドを実行すると、「gender」カラムの値が重複しているデータはグループ化され、ひとつの行で表示されました。

 

グループ化されているデータ数をカウントする

今度は「gender」カラムの値ごとのデータ数をカウントしてみましょう。

レコード数をカウントする COUNT関数を組み合わせます。コマンドは以下。

SELECT gender, COUNT(*) FROM users GROUP BY gender;

 

コマンドを実行すると、以下のように結果が表示されました。

man のデータ数は3、woman のデータ数は2であることがわかります。

メモ

COUNT関数の詳しい使い方はこちら

 

グループごとに、指定したカラムの最大値と最小値を取得する

今度は、「gender」カラムをグループ化して、グループごとに「age」カラムの最大値と最小値を取得してみましょう。

MAX関数とMIN関数を組み合わせます。コマンドは以下。

SELECT gender, MAX(age), MIN(age) FROM users GROUP BY gender;

 

コマンドを実行すると、以下のように結果が表示されました。

man の中での「age」の最大値は32で、最小値は21。

woman の中での「age」の最大値は25で、最小値は21であることがわかります。

 

ほかにもSUM関数で合計値、AVG関数で平均値を出すこともできます。

メモ

MAX関数の詳しい使い方はこちら

MIN関数の詳しい使い方はこちら

SUM関数の詳しい使い方はこちら

AVG関数の詳しい使い方はこちら

 

複数のカラムを指定してグループ化する

カンマ(,)で区切ることで、複数のカラムを指定してグループ化することもできます。

以下は「gender」と「age」カラムの値でグループ化する例。

SELECT gender, age FROM users GROUP BY gender, age;

 

コマンドを実行すると、「gender」カラムと「age」カラムの値の組み合わせが重複しているデータはグループ化され、ひとつの行で表示されました。

 

まとめ

以上、MySQLコマンド「GROUP BY」の使い方でした!

 

ここまでの内容をまとめておきます。

  • 「GROUP BY」でカラムの値が同じデータをグループ化することができる。
  • COUNT関数を組み合わせて、グループごとのデータ数をカウントできる。
  • MAXやMIN、SUM、AVGなど、関数を組み合わせることで、グループごとの計算値を取得できる。
  • 複数のカラムの値の組み合わせでグループ化することもできる。