MySQL 中的聚合函数 - 列表(如 Oracle 中的 LISTAGG)

Posted

技术标签:

【中文标题】MySQL 中的聚合函数 - 列表(如 Oracle 中的 LISTAGG)【英文标题】:Aggregate function in MySQL - list (like LISTAGG in Oracle) 【发布时间】:2012-03-16 09:59:06 【问题描述】:

我需要一个函数,它返回字符串列表。

我在表中有这样的数据:

Id    MyString
------------------------
 1    First
 2    Second
 3    Third
 4    Fourth

我需要这样的功能(这样的东西在 oracle 中有效):

select LISTAGG(MyString, ', ') as myList where id < 4

返回如下内容:

myList
------------------------
First, Second, Third

有什么想法吗?

【问题讨论】:

那是GROUP_CONCAT() in mysql MySQL Results as comma separated list的可能重复 【参考方案1】:

您正在寻找GROUP_CONCAT()

试试这个:

select group_concat(MyString separator ', ') as myList from table
where id < 4

当然,你可以group by结果。

【讨论】:

group_concat 在字符串的开头包含一个分隔符,任何不同于空的内容。知道为什么吗?【参考方案2】:

从 MySQL 5.7.22 开始,您还可以使用两个 JSON 聚合函数:JSON_ARRAYAGG 或 JSON_OBJECTAGG。您可以将这些与MySQL's JSON functions 组合在一起,以获取汇总为 JSON 的结果。与GROUP_CONCAT 不同,除了max_allowed_packet(影响所有查询)之外,没有任何MySQL 配置参数会限制返回值的大小。

【讨论】:

以上是关于MySQL 中的聚合函数 - 列表(如 Oracle 中的 LISTAGG)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础006 --- 常见函数介绍

MySQL基础006 --- 常见函数介绍

django 中的聚合函数,分组函数,F 查询, Q查询

选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

选择列表中的 COLUMN 无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中

Mysql常见函数