我有以下表结构:
server_id | server_databases |
---|---|
1 | [{“name”:“mssql”,“count”:12},{“name”:“postgresql”,“count”:1}] |
2 | [] |
3 | 无效的 |
结果我想收到什么(我想保留服务器 2 和 3,如果它是 null 或空对象无关紧要):
server_id | 数据库 |
---|---|
1 | {“mssql”:12,“postgresql”:1} |
2 | 无效的 |
3 | 无效的 |
我尝试自己构建 json
SELECT server_id,
(
select '{' || listagg('"' || x.name || '":' || x.count, ',') || '}' as clientdatabases
from (
select cb."name"::varchar as name, sum(cb."count")::int as count from e.server_databases as cb group by name
) x
)
FROM my_table e
但它因有趣的错误而失败
[XX000] 错误:由于内部错误,不支持查询。详细信息:不支持的见证案例 其中:nested_decorrelate_calc_witness_unsupported|calc_witness
看起来 PartiQL支持这种情况,但我不知道如何实现它。我现在将使用 UDF。但是,如果您可以帮助我提供“本机”解决方案,那就太棒了。
更新用于案例再现的 SQL 脚本:
CREATE table my_table(server_id int, server_databases super);
insert into my_table(server_id, server_databases) values (
1, json_parse('[{"name": "mssql", "count": 12},{"name": "postgresql", "count": 1}]')
),
(2, json_parse('[]')),
(3, null);
SELECT server_id,
(
select '{' || listagg('"' || x.name || '":' || x.count, ',') || '}' as clientdatabases
from (
select cb."name"::varchar as name, sum(cb."count")::int as count from e.server_databases as cb group by name
) x
)
FROM my_table e;