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_1
、criteria_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_firstName
と stu_lastName
の両方をグループ化します。同様に、MySQL で複数の列をグループ化できます。したがって、GROUP BY
ステートメントは、上記の方法で 1つまたは複数の列で効率的に使用できます。