MySQL 如何使用GROUP_CONCAT()和CONCAT()在同一个MySQL查询中连接字符串?
在MySQL查询中,我们常常需要把多个字段的值合并成一个字符串,以方便后续的处理。这时候可以使用GROUP_CONCAT()和CONCAT()函数来完成任务。
阅读更多:MySQL 教程
GROUP_CONCAT()函数
GROUP_CONCAT()函数可以将一个字段多行数据合并成一个以逗号为分隔符的字符串或者其他分隔符,语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC], ...]
[SEPARATOR str_val])
其中DISTINCT表示去重,expr表示要合并的字段,ORDER BY表示按照指定的排序规则合并,SEPARATOR表示指定的分隔符。
例如,有以下一张表students:
id | name | score |
---|---|---|
1 | Tom | 80 |
2 | Jack | 95 |
3 | Lucy | 85 |
如果要将所有学生的姓名合并成一个字符串,可以这样写:
SELECT GROUP_CONCAT(name) FROM students;
输出结果为:
Tom,Jack,Lucy
如果要使用“-”符号连接所有学生的姓名,可以这样写:
SELECT GROUP_CONCAT(name SEPARATOR '-') FROM students;
输出结果为:
Tom-Jack-Lucy
如果要按照分数从高到低合并学生姓名,可以这样写:
SELECT GROUP_CONCAT(name ORDER BY score DESC SEPARATOR '-') FROM students;
输出结果为:
Jack-Lucy-Tom
CONCAT()函数
CONCAT()函数可以将多个字符串字段合并成一个字符串,语法如下:
CONCAT(str1,str2,...)
其中,str1、str2等都是要合并的字符串字段。
例如,有以下一张表person:
id | first_name | last_name |
---|---|---|
1 | Tom | Smith |
2 | Jack | Wang |
3 | Lucy | Chen |
如果要将first_name和last_name合并成一个新的字段full_name,可以这样写:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM person;
输出结果为:
Tom Smith
Jack Wang
Lucy Chen
GROUP_CONCAT()和CONCAT()同时使用
如果想要在一个MySQL查询中同时使用GROUP_CONCAT()和CONCAT(),可以把它们合并在一起使用。
例如,有以下一张表orders:
order_id | product_name | qty |
---|---|---|
1 | Apple | 3 |
1 | Banana | 2 |
2 | Orange | 1 |
2 | Watermelon | 4 |
如果要将每个订单的产品合并成一个字符串,然后再将订单号和产品字符串合并成一个结果集,可以这样写:
SELECT order_id, CONCAT('[', GROUP_CONCAT(product_name SEPARATOR ','), ']') AS products
FROM orders
GROUP BY order_id;
输出结果为:
order_id | products |
---|---|
1 | [Apple,Banana] |
2 | [Orange,Watermelon] |
在这个查询中,首先使用GROUP_CONCAT()将每个订单的产品名合并为一个字符串,用逗号隔开。然后再使用CONCAT()函数将“[”和“]”符号添加到产品字符串的前后。
结论
在MySQL查询中,使用GROUP_CONCAT()和CONCAT()函数可以方便地将多个字符串字段合并成一个字符串。如果需要同时使用这两个函数,可以将它们结合在一起使用,实现更复杂的字符串连接操作。