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语句,提高查询效率,但需要注意分隔符的使用以及合并数据的正确性。