排序
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
一些聚合函数允许对其输入进行排序,以生成有序的输出。这些聚合函数允许在其参数列表中指定一个可选的 ORDER BY
子句。这不要与 WITHIN GROUP (ORDER BY ..) 子句混淆,该子句是排序输入以生成单个、无序输出所必需的。
对于将聚合值生成为嵌套或格式化数据结构的聚合(例如)来说,这很有意义
- ARRAY_AGG,它将数据聚合到一个数组中。
- COLLECT,它将数据聚合到一个嵌套表(Oracle)中。
- JSON_ARRAYAGG,它将数据聚合到一个 JSON 数组中。
-
LISTAGG,它将数据聚合到一个字符串中。不幸的是,标准的
LISTAGG
函数不一致地使用了 WITHIN GROUP 语法。MySQL 的GROUP_CONCAT
与其余部分更一致。 - XMLAGG,它将数据聚合到一个 XML 元素中。
使用 ARRAY_AGG 的一个例子可能如下所示
SELECT array_agg(ID), array_agg(ID ORDER BY ID DESC) FROM BOOK
create.select( arrayAgg(BOOK.ID), arrayAgg(BOOK.ID).orderBy(BOOK.ID.desc())) .from(BOOK)
产生
+--------------+--------------+ | array_agg | array_agg | +--------------+--------------+ | [1, 3, 4, 2] | [4, 3, 2, 1] | +--------------+--------------+
请注意,在没有显式 ORDER BY
子句的情况下,排序始终是不确定的。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!