迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中按多列分组

作者:迹忆客 最近更新:2024/03/25 浏览次数:

在本教程中,我们旨在了解如何使用具有两列或更多列的 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 语句可以通过上述方法有效地用于一列或多列。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:217 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:171 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:470 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:151 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:310 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:233 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便