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

JSON_ARRAYAGG

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

可以使用 JSON_ARRAYAGG 将数据集聚合到 org.jooq.JSONorg.jooq.JSONB 数组中

SELECT json_arrayagg(author.id)
FROM author
 
create.select(jsonArrayAgg(AUTHOR.ID))
      .from(AUTHOR)
      .fetch();

结果如下

+---------------+
| json_arrayagg |
+---------------+
| [1,2]         |
+---------------+

排序聚合内容

当将数据聚合到数组或 JSON 数组中时,排序可能很重要。为此,请在 JSON_ARRAYAGG 中使用 ORDER BY 子句

SELECT json_arrayagg(author.id ORDER BY author.id DESC)
FROM author
 
create.select(jsonArrayAgg(AUTHOR.ID).orderBy(AUTHOR.ID.desc())
      .from(AUTHOR)
      .fetch();

结果如下

+---------------+
| json_arrayagg |
+---------------+
| [2,1]         |
+---------------+

NULL 处理

一些方言支持 SQL 标准 NULL ON NULLABSENT ON NULL 语法,允许从聚合中包含/排除 NULL 值。默认情况下,SQL 聚合函数始终排除 NULL 值,但在 JSON 数据类型的上下文中,NULL 可能具有不同的意义

SELECT
  json_arrayagg(nullif(author.id, 1) NULL   ON NULL) AS c1,
  json_arrayagg(nullif(author.id, 1) ABSENT ON NULL) AS c2
FROM author
 
create.select(
        jsonArrayAgg(nullif(AUTHOR.ID, 1)).nullOnNull()  .as("c1"),
        jsonArrayAgg(nullif(AUTHOR.ID, 1)).absentOnNull().as("c2"))
      .from(AUTHOR)
      .fetch();

结果如下

+----------+-----+
| C1       | C2  |
+----------+-----+
| [null,2] | [2] |
+----------+-----+

效果类似于 FILTER 子句

方言支持

此示例使用 jOOQ

jsonArrayAgg(AUTHOR.ID)

翻译成以下特定方言的表达式

Aurora Postgres, CockroachDB, Postgres, YugabyteDB

json_agg(AUTHOR.ID)

BigQuery, DuckDB

to_json(array_agg(AUTHOR.ID))

ClickHouse

toJSONString(groupArray(AUTHOR.ID))

DB2

CAST(('[' || listagg(
  AUTHOR.ID,
  ','
) || ']') AS varchar(32672))

H2, Oracle

json_arrayagg(AUTHOR.ID)

MariaDB, MySQL

json_merge_preserve(
  '[]',
  concat(
    '[',
    group_concat(AUTHOR.ID SEPARATOR ','),
    ']'
  )
)

Snowflake

array_agg(coalesce(
  to_variant(AUTHOR.ID),
  parse_json('null')
))

SQLite

json_group_array(AUTHOR.ID)

Trino

cast(array_agg(AUTHOR.ID) AS json)

ASE, Access, Aurora MySQL, Databricks, Derby, Exasol, Firebird, HSQLDB, Hana, Informix, MemSQL, Redshift, SQLDataWarehouse, SQLServer, Sybase, Teradata, Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo