MySQL group_concat函数
MySQL中的group_concat函数用于将多个行的某个字段进行合并,同样也可以组合多个字段。通常用于多表查询时需要将子查询中多行数据进行合并后返回一个字段值,或在查询结果中需要将某个字段的多个值合并在一起。
语法格式:
SELECT group_concat(field1 SEPARATOR '分隔符') FROM table;
其中,field1表示需要合并的字段,可以是列名、常量或表达式;SEPARATOR表示分隔符,表示合并的结果之间的分割符,可以为空格、逗号等常用符号。
例如,对以下数据进行group_concat合并:
name | grade |
---|---|
Tom | 90 |
Jack | 95 |
Lucy | 80 |
执行语句:
SELECT group_concat(name SEPARATOR ', ') AS names FROM table;
返回结果:
names
------
Tom, Jack, Lucy
阅读更多:MySQL 教程
MySQL中的group_concat函数使用示例
使用连接符合并字段值
假设有以下两张表:
students
表:
id | name |
---|---|
1 | Tom |
2 | Jack |
3 | Lucy |
scores
表:
id | subject | score |
---|---|---|
1 | Math | 90 |
1 | English | 80 |
2 | Math | 95 |
2 | English | 85 |
3 | Math | 80 |
3 | English | 75 |
查询每个学生的学科和分数:
SELECT s.name, sc.subject, sc.score FROM students s
LEFT JOIN scores sc ON s.id = sc.id
得到的结果是这样的:
name | subject | score |
---|---|---|
Tom | Math | 90 |
Tom | English | 80 |
Jack | Math | 95 |
Jack | English | 85 |
Lucy | Math | 80 |
Lucy | English | 75 |
使用group_concat函数将每个学生的学科和分数进行合并:
SELECT s.name, group_concat(sc.subject, ':', sc.score SEPARATOR ', ') AS subjects_scores
FROM students s
LEFT JOIN scores sc ON s.id = sc.id
GROUP BY s.id
得到的结果是这样的:
name | subjects_scores |
---|---|
Tom | Math:90, English:80 |
Jack | Math:95, English:85 |
Lucy | Math:80, English:75 |
使用group_concat进行字符串拼接
假设有以下数据:
CREATE TABLE fruit (name VARCHAR(20));
INSERT INTO fruit VALUES ('apple'), ('orange'), ('pear'), ('banana');
现在我们希望将fruit表中的水果名称用分号间隔起来:
SELECT group_concat(name SEPARATOR ';') AS fruits FROM fruit;
结果:
fruits
-------
apple;orange;pear;banana
group_concat常用示例
- 将查询结果进行字符串拼接:
SELECT group_concat(column_name) FROM table_name;
- 合并行内多个字段值:
SELECT group_concat(field1, '名字:', field2 SEPARATOR '/') FROM table;
- 分组后合并多个字段值:
SELECT main_field, group_concat(child_field SEPARATOR '.') FROM table GROUP BY main_field;
总结
MySQL中的group_concat函数提供了一个很好的方式来合并行内或分组后的多个字段值,可以应用于很多场景,如查询结果的字符串拼接、分类统计后的合并等。在使用时需要注意合并后结果的长度是否超出数据库的限制。同时,在Access中,没有类似的函数,需要使用VBA自定义函数实现,或者通过查询多个子表后在程序中进行拼接。