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_idgroup_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;

结果按照逆序就行排序了。