可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

排序

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

一些聚合函数允许对其输入进行排序,以生成有序的输出。这些聚合函数允许在其参数列表中指定一个可选的 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 子句的情况下,排序始终是不确定的。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo