更新:2024/01/01

MySQLのGROUP BYについて

はるか
はるか
sqlでグループ化ってどうするの?

ふゅか
ふゅか
GROUP BY句を使えば、グルーピングができるわ。

1. GROUP BYとは

データベース内のデータを特定のカラム(列)の値に基づいてグループ化するために使用されます。

2. 実際にGROUPBYを動かす

2.1. テーブルの設計

まず、今回使用するテーブルを設計します。今回はキャラクターに関するテーブルを作成します。 キャラクターに関連する属性は名前、年齢、性別、種族、職業などがありあます。

2.2. テーブルの作成

まずは、テーブルを作成しましょう。

CREATE TABLE characters (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    gender VARCHAR(10),
    race VARCHAR(50),
    occupation VARCHAR(50)
);

2.3. データの挿入

作成したテーブルにデータを挿入します。

INSERT INTO characters (name, age, gender, race, occupation) VALUES
('Alice', 30, 'Female', 'Human', 'Warrior'),
('Bob', 25, 'Male', 'Elf', 'Archer'),
('はるか', 19, 'Female', 'Elf', 'Mage'),
('David', 35, 'Male', 'Dwarf', 'Blacksmith'),
('ふゅか', 1500, 'Female', 'Elf', 'Priest');

挿入したデータは次のような5つのデータとなっています。

2.4. グループ化の実施

2.4.1. 職業ごとにキャラクター数をカウントしたい場合

集計関数COUNTを使って、それぞれのレコード数を集計します。

SELECT occupation, COUNT(*) as number_of_characters
FROM characters
GROUP BY occupation;


はるか
はるか
職業はそれぞれのキャラクターで分かれているな。

2.4.2. 種族ごとに平均年齢を算出したい場合

集計関数であるAVGを使用してageごとの平均値を算出します。

SELECT race, AVG(age) as average_age
FROM characters
GROUP BY race;


はるか
はるか
elfの平均年齢が高いな。ん?

2.4.3. 性別ごとのキャラ数を集計したい場合

SELECT gender, COUNT(*) as number_of_characters
FROM characters
GROUP BY gender;


ふゅか
ふゅか
性別ごとにキャラクター数を分けれましたね♪

PR