暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

mysql group_concat函数

原创 bjgzxx 2024-04-05
1003

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;


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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论