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)的主要内容,如果未能解决你的问题,请参考以下文章
选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中