mysql中GROUP_CONCAT函数详解

发布于:2023-09-15 ⋅ 阅读:(65) ⋅ 点赞:(0)

GROUP_CONCAT是MySQL中的一个聚合函数,它用于将多行数据按照指定的顺序连接成一个字符串,并返回结果。下面是对GROUP_CONCAT函数的详解:

语法:
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name …]]
[SEPARATOR str_val])

参数解释:

  • DISTINCT: 可选参数,用于指定是否对结果进行去重。
  • expr: 要连接的列或表达式。
  • ORDER BY: 可选参数,用于指定连接结果的排序方式。
  • ASC | DESC: 可选参数,用于指定排序的升序或降序。
  • SEPARATOR: 可选参数,用于指定连接结果中列之间的分隔符。

示例:
假设有一个表"orders",包含以下数据:

+---------+------------+
| order_id| product    |
+---------+------------+
| 1       | Apple      |
| 1       | Orange     |
| 2       | Banana     |
| 3       | Apple      |
+---------+------------+

我们可以使用以下查询:

SELECT order_id, GROUP_CONCAT(product ORDER BY product SEPARATOR ', ') AS products
FROM orders
GROUP BY order_id;

结果:

+---------+-----------------------+
| order_id| products              |
+---------+-----------------------+
| 1       | Apple, Orange         |
| 2       | Banana                |
| 3       | Apple                 |
+---------+-----------------------+

注意事项:

  • GROUP_CONCAT默认使用逗号作为分隔符,如果需要使用其他分隔符,可以使用SEPARATOR参数进行指定。
  • 如果连接的结果超出了group_concat_max_len变量的值,默认情况下,结果会被截断。可以通过设置该变量的值来调整连接结果的最大长度。
  • GROUP_CONCAT函数只能在SELECT语句中使用,不能用于其他SQL语句中。

初始化SQL

create table orders
(
    order_id int         null,
    product  varchar(20) null
);

INSERT INTO test.orders (order_id, product) VALUES (1, 'Apple');
INSERT INTO test.orders (order_id, product) VALUES (1, 'Orange');
INSERT INTO test.orders (order_id, product) VALUES (2, 'Banana');
INSERT INTO test.orders (order_id, product) VALUES (3, 'Apple');

执行SQL

select *
from orders;

select order_id, GROUP_CONCAT(product)
from orders
GROUP BY order_id;


SELECT order_id, GROUP_CONCAT(product ORDER BY product SEPARATOR ', ') AS products
FROM orders
GROUP BY order_id;

本文含有隐藏内容,请 开通VIP 后查看