mysql group_concat函数
1、group_concat用处
group_concat
是 MySQL 数据库中的一个聚合函数,它的主要功能是连接来自多行的字符串值。当你在查询中使用 GROUP BY
子句来分组结果时,group_concat
可以将每个组的所有值连接成一个字符串。
这个函数特别有用,当你想要把某个分组中的多个值合并成一个值时。例如,你可能有一个包含多个订单项的订单表,并且你想为每个订单生成一个包含所有订单项名称的列表。
2、创建测试用例
CREATE TABLE orders (
order_id INT,
item_name VARCHAR(255)
);
INSERT INTO orders (order_id, item_name) VALUES
(1, 'apple'),
(1, 'banana'),
(2, 'cherry'),
(2, 'date'),
(2, 'elderberry');
select * from orders
1 apple
1 banana
2 cherry
2 date
2 elderberry
现在,如果你想要为每个 order_id
生成一个包含所有 item_name
的列表,你可以使用 group_concat
函数:
SELECT order_id, GROUP_CONCAT(item_name) AS items_list
FROM orders
GROUP BY order_id;
你可以看到,对于每个 order_id
,group_concat
函数将所有的 item_name
连接成了一个逗号分隔的字符串。
group_concat
函数还有一些可选的参数,例如 SEPARATOR
,它允许你指定用于连接值的分隔符。默认的分隔符是逗号。
此外,需要注意的是,group_concat
函数的结果长度是有限制的,这个限制可以通过修改 group_concat_max_len
系统变量来更改。如果连接的结果超过了这个长度,结果将被截断。
3、group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
说明:
(1)使用distinct可以排除重复值;
(2)如果需要对结果中的值进行排序,可以使用order by子句;
(3)separator是一个字符串值,默认为逗号。
select order_id,group_concat(item_name separator ';') from orders group by order_id;
再插入两条重复的数据
INSERT INTO orders (order_id, item_name) VALUES
(1, 'apple'),
(2, 'date') ;
执行如下语句:
SELECT order_id, GROUP_CONCAT(item_name) AS items_list
FROM orders
GROUP BY order_id;
执行下面语句:
select order_id,group_concat(distinct item_name) from orders group by order_id;
去除重复的数据然后组合到一起了,但是没有排序
select
order_id,
group_concat(distinct item_name order by item_name desc)
from
orders
group by
order_id;
结果按照逆序就行排序了。