JSON_ARRAYAGG
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
可以使用 JSON_ARRAYAGG 将数据集聚合到 org.jooq.JSON 或 org.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 NULL 和 ABSENT 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] | +----------+-----+
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
反馈
您对此页面有任何反馈吗?我们很乐意听到您的意见!