在 MySQL 中按多列分組

Preet Sanghavi 2023年1月30日
  1. MySQL 中的 Group By 語句
  2. MySQL 中多列的 GROUP BY 語句
在 MySQL 中按多列分組

在本教程中,我們旨在瞭解如何使用具有兩列或更多列的 GROUP BY 命令。

MySQL GROUP BY 命令是一種技術,通過它我們可以根據為分組目的定義的特定標準將具有相同值的記錄組合在一起。當我們嘗試僅考慮單個列對資料進行分組時,所有具有定義標準的相同值的記錄都在單個輸出中耦合在一起。

但是,MySQL 使使用者不僅可以使用單個列對資料進行分組以供考慮,還可以使用多個列進行分組。我們將在本教程的後面部分探討這種技術。總而言之,當我們嘗試通過考慮多列進行分組時,我們可以得到一個結果,其中列值的分組是針對多個列以及分組標準進行的。

雖然這個概念可能聽起來很難實現,但讓我們首先考慮 GROUP BY 語句中的一列。

然而,在我們開始之前,我們建立了一個虛擬資料集來使用。在這裡,我們建立了一個表,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

現在,讓我們嘗試理解使用簡單的 GROUP BY 語句將 stu_lastNamestu_grade 的總和作為聚合子句的用法。

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 提供了基於標準對記錄進行分組的功能。這種方法的另一個補充是我們可以一次對錶中的多列進行分組。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_2criteria_col_3GROUP BY 子句中包含的三列。

現在讓我們嘗試根據學生的成績總和作為聚合函式對學生的名字和姓氏進行分組。我們可以使用以下程式碼執行此操作:

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 語句可以通過上述方法有效地用於一列或多列。

作者: 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