このチュートリアルは、MySQLを使用した基本的なSQLクエリの学習シリーズの一部です。このチュートリアルでは、集計関数でGROUP BY句を使用して、MySQLでテーブル行のグループ化を実行するSQLクエリについて説明します。 MySQLで集計関数(SUM、AVG、MAX、MIN、COUNT、DISTINCT)を使用して、集計関数を学習することもできます。
GroupByクエリ
GROUP BY 句を使用して、テーブル行のグループ化を実行できます。また、集計関数とともに使用して、レポートを生成したり、統計データを収集したりすることもできます。
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
クエリの説明
GROUP BY 句を使用して、行のセットを形成する列を指定することにより、行をグループ化できます。
集計関数を使用して、GROUP BY句を効果的に使用してレポートを生成し、統計データを収集できます。
グループ化は複数の列に適用でき、最初の列がプライマリグループを形成し、後続の列がサブグループを形成します。
例
このセクションでは、集計関数を使用する場合と使用しない場合のGROUPBY句を使用してグループ化を実行する例を示します。下記のクエリを使用して、ID、名、姓、年齢、およびユーザーデータを格納するアクティブな列を持つユーザーテーブルを作成します。
# Create the User Table
CREATE TABLE `enterprise`.`user` (
`user_id` BIGINT NOT NULL,
`first_name` VARCHAR(45) ,
`last_name` VARCHAR(45),
`age` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));
下記のクエリを使用して、ユーザーテーブルにテストデータを挿入できます。
# Insert Rows - All Columns
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
( 1, 'John', 'Smith', 18, 1 ),
( 2, 'Rick', 'Jones', 19, 1 ),
( 3, 'John', 'Ponting', 16, 0 ),
( 4, 'Harsh', 'Upadhyay', 20, 1 ),
( 5, 'Tajwinder', 'Singh', 18, 0 );
上記のクエリは、5つの異なるユーザーを表すために、ID、名、姓、およびアクティブな列を持つ5つの行をテーブルに挿入します。
次に、集計関数を使用せずにGROUP BY句を使用して、行をグループ化します。以下に示すように、MySQLのGROUPBY句を使用して実行できます。
# GROUP BY - Generate the set of active values
SELECT active from user GROUP BY active;
# Result
1
0
# GROUP BY - Generate the set of first name
SELECT first_name from user GROUP BY first_name;
# Result
John
Rick
Harsh
Tajwinder
上記のクエリは、GROUPBY句を使用して行をグループ化することで結果セットを返しました。次に、以下に示すように、集計関数を使用して行をグループ化します。
# GROUP BY - Get the maximum age of all users with specific first name>
SELECT first_name, MAX(age) AS max_age from user GROUP BY first_name;
# Result
John 18
Rick 19
Harsh 20
Tajwinder 18
# GROUP BY - Get the average age of all users with specific first name
SELECT first_name, AVG(age) AS avg_age from user GROUP BY first_name;
# Result
John 17.0000
Rick 19.0000
Harsh 20.0000
Tajwinder 18.0000
これは、集計関数の有無にかかわらずGROUP BY句を使用して、特定の列のテーブルの行をグループ化する方法です。