MySQL の複数の列でグループ化

Preet Sanghavi 2023年1月30日
  1. MySQL の Group By ステートメント
  2. 複数の列を持つ MySQL の GROUP BY ステートメント
MySQL の複数の列でグループ化

このチュートリアルでは、2つ以上の列で GROUP BY コマンドを使用する方法を理解することを目的としています。

MySQL の GROUP BY コマンドは、グループ化の目的で定義された特定の基準に基づいて、同じ値でレコードをクラブ化できる手法です。単一の列のみを考慮してデータをグループ化しようとすると、基準が定義されているのと同じ値を持つすべてのレコードが 1つの出力に結合されます。

ただし、MySQL を使用すると、ユーザーは、検討対象の単一の列だけでなく、複数の列を使用してデータをグループ化できます。このチュートリアルの後半のセクションで、この手法について説明します。要約すると、複数の列を考慮してグループ化しようとすると、グループ化基準とともに複数の列に関して列値のグループ化が行われるという結果が得られます。

この概念は実装が難しいように聞こえるかもしれませんが、GROUP BY ステートメントの 1つの列を検討することから始めましょう。

ただし、開始する前に、操作するダミーデータセットを作成します。ここでは、テーブル student_details とその中のいくつかの行を作成します。

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_grade int,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_grade,stu_lastName) 
 VALUES(1,"Preet",40,"Sanghavi"),
 (2,"Rich",50,"John"),
 (3,"Veron",60,"Brow"),
 (4,"Geo",70,"Jos"),
 (5,"Hash",80,"Shah"),
 (6,"Sachin",90,"Parker"),
 (7,"David",25,"Miller"),
 (8,"Richa",50,"Joh"),
 (9,"Verona",60,"Brow"),
 (10,"Geoa",70,"Josh"),
 (11,"Hasha",80,"Ash"),
 (12,"Allen",90,"Parker");

上記のクエリは、学生の名前と名前を含む行とともにテーブルを作成します。データのエントリを表示するために、次のコードを使用します。

SELECT * FROM student_details;

上記のコードは、次の出力を提供します。

stu_id	stu_firstName	stu_grade	stu_lastName
1			Preet			40			Sanghavi
2			Rich			50			John
3			Veron			60			Brow
4			Geo				70			Jos
5			Hash			80			Shah
6			Sachin			90			Parker
7			David			25			Miller
8			Richa			50			Joh
9			Verona			60			Brow
10			Geoa			70			Josh
11			Hasha			80			Ash
12			Allen			90			Parker

ここで、集約句として stu_grade の合計を使用して stu_lastName をグループ化するための単純な GROUP BY ステートメントの使用法を理解してみましょう。

MySQL の Group By ステートメント

ご存知のとおり、GROUP BY ステートメントは、定義された基準に対して同じ値を持つレコードをグループ化するのに役立ちます。GROUP BY ステートメントの基本的な構文は次のとおりです。

SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1;

同じ名前の学生のスコアの合計は、次のように求められます。

SELECT SUM(stu_grade), stu_lastName FROM student_details
GROUP BY stu_lastName;

前述のコードは、次の出力を提供します。

SUM(stu_grade)	stu_lastName
40				Sanghavi
50				John
120				Brow
70				Jos
80				Shah
180				Parker
25				Miller
50				Joh
70				Josh
80				Ash

複数の列を持つ MySQL の GROUP BY ステートメント

上記のように、MySQL は、基準に基づいてレコードをグループ化する機能を提供します。この方法のもう 1つの追加は、一度にテーブルから複数の列をグループ化できることです。MySQL で複数の列をグループ化するための構文は、次のように記述できます。

SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1, criteria_col_2, criteria_col_3;

上記のように、criteria_col_1criteria_col_2、および criteria_col_3 は、GROUP BY 句に含まれる 3つの列です。

次に、集計関数としての成績の合計に基づいて、学生の名前と名前をグループ化してみましょう。この操作は、次のコードで実行できます。

SELECT SUM(stu_grade), stu_lastName, stu_firstName
FROM student_details
GROUP BY stu_lastName, stu_firstName;

上記のコードの出力は次のとおりです。

SUM(stu_grade)	stu_lastName	stu_firstName
40				Sanghavi		Preet
50				John			Rich
60				Brow			Veron
70				Jos				Geo
80				Shah			Hash
90				Parker			Sachin
25				Miller			David
50	            Joh	            Richa
60				Brow			Verona
70				Josh			Geoa
80				Ash				Hasha
90				Parker			Allen

ご覧のとおり、出力は列 stu_firstNamestu_lastName の両方をグループ化します。同様に、MySQL で複数の列をグループ化できます。したがって、GROUP BY ステートメントは、上記の方法で 1つまたは複数の列で効率的に使用できます。

著者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

関連記事 - MySQL Groupby