MySQL 如何使用单个MySQL查询将行折叠成逗号分隔列表?

MySQL 如何使用单个MySQL查询将行折叠成逗号分隔列表?

在多数情况下,MySQL查询结果可能不是我们想要的,比如有时候我们希望查询到的数据以逗号分隔的形式呈现,而不是独立的行。在这篇文章中,我们将会介绍如何使用MySQL的GROUP_CONCAT来将行折叠成逗号分隔的列表格式。同时,我们将会提供一些示例代码,以便更好地理解这个过程。

阅读更多:MySQL 教程

GROUP_CONCAT函数

GROUP_CONCAT函数是MySQL中的一个聚合函数,它可以将行合并成指定分隔符隔开的字符串。这个函数在需要将多行合并为单行时特别有用。

这个函数的语法如下:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

其中,expr是要合并的列或表达式,DISTINCT是可选参数,指定是否去除重复值,ORDER BY是可选参数,指定排序规则,默认是升序排序,str_val是用来分隔合并后字符串的分隔符,默认值为,

下面这个例子将展示如何使用GROUP_CONCAT将行折叠成以逗号分隔的列表格式。

示例代码

对一个MySQL数据表student,查询每个班级的学生名单,以逗号分隔。

建表语句如下:

CREATE TABLE student (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  class VARCHAR(10) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入数据语句如下:

INSERT INTO student (name, class) VALUES
('A','1'),('B','1'),('C','1'),
('D','2'),('E','2'),('F','2'),
('G','3'),('H','3'),('I','3');

使用GROUP_CONCAT函数实现查询每个班级的学生名单,以逗号分隔:

SELECT class, GROUP_CONCAT(name SEPARATOR ',') as student_list
FROM student
GROUP BY class;

以上SQL语句的输出结果:

+-------+--------------+
| class | student_list |
+-------+--------------+
| 1     | A,B,C        |
| 2     | D,E,F        |
| 3     | G,H,I        |
+-------+--------------+

结论

通过使用MySQL的GROUP_CONCAT函数,我们可以将多行数据按照指定规则拼接成单行的字符串,从而实现我们需要的查询结果。对于需要将多行数据拼接成一行字符串的需求场景,这个函数是非常有用的,可以显著地简化开发过程,提高查询效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程