利用MySQL的GROUP_CONCAT函数将多行数据合并成一行

1. GROUP_CONCAT函数介绍

GROUP_CONCAT函数是MySQL中的一个聚合函数,可以将一个表中的多条记录合并成为一条记录。

1.1 GROUP_CONCAT语法

SELECT GROUP_CONCAT(column_name SEPARATOR separator)

FROM table_name

WHERE condition;

其中,column_name是要合并的列名称;separator是合并后每个值之间的分隔符;table_name是要查询的表名称;condition是查询条件。

1.2 GROUP_CONCAT分隔符介绍

GROUP_CONCAT函数中的分隔符可以是任意的字符串。如果不指定分隔符,则默认使用逗号(,)作为分隔符。

2. GROUP_CONCAT使用示例

假设现有一张student表:

CREATE TABLE student (

id INT PRIMARY KEY,

name VARCHAR(50),

age INT,

subject VARCHAR(50)

);

INSERT INTO student VALUES

(1, 'Tom', 18, 'Math'),

(2, 'Jerry', 19, 'English'),

(3, 'Lucy', 18, 'Math'),

(4, 'Lily', 19, 'Chinese'),

(5, 'David', 18, 'English'),

(6, 'John', 19, 'Chinese');

2.1 合并同一个age值的学生姓名

SELECT age, GROUP_CONCAT(name)

FROM student

GROUP BY age;

上述代码中,使用GROUP_CONCAT将同一个age值的学生姓名合并为一条记录。

执行结果:

+-----+--------------------------------------+

| age | GROUP_CONCAT(name) |

+-----+--------------------------------------+

| 18 | Tom,Lucy,David |

| 19 | Jerry,Lily,John |

+-----+--------------------------------------+

2.2 合并同一个subject值的学生姓名,并使用竖线(|)分隔符

SELECT subject, GROUP_CONCAT(name SEPARATOR '|')

FROM student

GROUP BY subject;

上述代码中,使用GROUP_CONCAT将同一个subject值的学生姓名合并为一条记录,并使用竖线作为分隔符。

执行结果:

+---------+---------------------------------+

| subject | GROUP_CONCAT(name SEPARATOR '|') |

+---------+---------------------------------+

| Chinese | Lily|John |

| English | Jerry|David |

| Math | Tom|Lucy |

+---------+---------------------------------+

2.3 合并同一个age值的学生姓名,并按照年龄倒序排序

SELECT age, GROUP_CONCAT(name ORDER BY age DESC)

FROM student

GROUP BY age;

上述代码中,使用GROUP_CONCAT将同一个age值的学生姓名合并为一条记录,并按照age倒序排序。

执行结果:

+-----+----------------------------------+

| age | GROUP_CONCAT(name ORDER BY age DESC) |

+-----+----------------------------------+

| 19 | John,Lily,Jerry |

| 18 | David,Lucy,Tom |

+-----+----------------------------------+

3. 结语

GROUP_CONCAT函数的使用可以大大简化SQL语句,提高查询效率,但需要注意分隔符的使用以及合并数据的正确性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签