gpt4 book ai didi

postgresql - 从 jsonb 记录数组中聚合数值(包括 NULL 值)

转载 作者:行者123 更新时间:2023-11-29 11:48:57 25 4
gpt4 key购买 nike

我使用的是 postgres 9.5,我的数据是这样的整数:

id | v1 | v2 | v3
---+----+----+------
1 | 10 | 3 | null
2 | 5 |null| 1
3 |null| 2 | 7

我创建了一个 jsonb 数组,如下所示:

 [{"v1": 10, "v2": 3, "v3": null}]  

我想运行比较和聚合(IE 对所有 v1 求和)。

1) jsonb_array_elements 是正确的操作还是有更简单的方法?

2) 如果 jsonb_array_elements 是最好的方法,我如何转换为整数并生成 null 值以便我可以运行比较/聚合?

参见 DBFIDDLE

我已经看了几个堆栈问题,这是我所得到的:

SELECT id, x->'v1' AS v1
FROM base,jsonb_array_elements(j) t(x);

最佳答案

你快到了。

SELECT sum((x->>'v1')::int) AS v1_sum
FROM base, jsonb_array_elements(j) t(x);

使用 ->> operator instead of ->获取 text 值;然后投。将 jsonb NULL 转换为 integer 失败,而您希望以 text 开头。

如果您有更多值列,则 - operator也可能变得有吸引力:从整行中形成一个 jsonb 记录并减去(删除)id 键:

SELECT id, json_agg(j1) AS j
FROM (SELECT id, to_jsonb(t) - 'id' AS j1 FROM t) t1
GROUP BY id;

db<> fiddle here

关于postgresql - 从 jsonb 记录数组中聚合数值(包括 NULL 值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53948558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com