JSON_OBJECTAGG
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
可以使用 JSON_OBJECTAGG 将数据集聚合为 org.jooq.JSON 或 org.jooq.JSONB 对象
SELECT json_objectagg( CAST(author.id AS varchar(100)), first_name ) FROM author
create.select(jsonObjectAgg(
cast(AUTHOR.ID, VARCHAR(100)),
AUTHOR.FIRST_NAME
))
.from(AUTHOR)
.fetch();
结果如下
+----------------------------+
| json_objectagg |
+----------------------------+
| {"1":"George","2":"Paulo"} |
+----------------------------+
NULL 处理
某些方言支持 SQL 标准 NULL ON NULL 和 ABSENT ON NULL 语法,允许从聚合中包含/排除 NULL 值。 默认情况下,SQL 聚合函数总是排除 NULL 值,但在 JSON 数据类型的上下文中,NULL 可能具有不同的意义
SELECT
json_objectagg(
CAST(author.id AS varchar(100)),
nullif(first_name, 'George')
NULL ON NULL
) AS c1,
json_objectagg(
CAST(author.id AS varchar(100)),
nullif(first_name, 'George')
ABSENT ON NULL
) AS c2
FROM author
create.select(
jsonObjectAgg(
cast(AUTHOR.ID, VARCHAR(100)),
nullif(AUTHOR.FIRST_NAME, "George")
).nullOnNull().as("c1"),
jsonObjectAgg(
cast(AUTHOR.ID, VARCHAR(100)),
nullif(AUTHOR.FIRST_NAME, "George")
).absentOnNull().as("c2")
)
.from(AUTHOR)
.fetch();
结果如下
+------------------------+---------------+
| C1 | C2 |
+------------------------+---------------+
| {"1":null,"2":"Paulo"} | {"2":"Paulo"} |
+------------------------+---------------+
jsonObjectAgg(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
翻译成以下特定方言的表达式
Aurora Postgres, Postgres, YugabyteDB
json_object_agg(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
BigQuery
json_object( array_agg(AUTHOR.FIRST_NAME), array_agg(AUTHOR.LAST_NAME) )
CockroachDB
(('{' || string_agg(regexp_replace(CAST(json_build_object(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) AS string), '^\{(.*)\}$', '\1', 'g'), ',') || '}'))
DB2
(('{' || listagg(
regexp_replace(CAST(json_object(KEY AUTHOR.FIRST_NAME VALUE AUTHOR.LAST_NAME) AS varchar(32672)), '^\{(.*)\}$', '\1'),
','
) || '}'))
DuckDB
to_json(map_from_entries(array_agg(ROW(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME))))
H2, Oracle
json_objectagg(KEY AUTHOR.FIRST_NAME VALUE AUTHOR.LAST_NAME)
MariaDB, MySQL
json_objectagg(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
Snowflake
object_agg(coalesce(
to_variant(AUTHOR.FIRST_NAME),
parse_json('null')
), coalesce(
to_variant(AUTHOR.LAST_NAME),
parse_json('null')
))
SQLite
json_group_object(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
Trino
cast(map(array_agg(AUTHOR.FIRST_NAME), array_agg(AUTHOR.LAST_NAME)) AS json)
ASE, Access, Aurora MySQL, ClickHouse, Databricks, Derby, Exasol, Firebird, HSQLDB, Hana, Informix, MemSQL, Redshift, SQLDataWarehouse, SQLServer, Sybase, Teradata, Vertica
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!