gpt4 book ai didi

json - 如何计算嵌套在 Postgresql JSON 中的数字?

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

我想对以 Postgresql 9.4 JSON 格式存储的数字进行一些操作。假设我有这张表:

CREATE TABLE t (id SERIAL, a JSON);

INSERT INTO t (a)
VALUES ('[[0.1, 2.0], [0.3, 4.0], [0.5, 6.0]]'),
('[[0.7, 8.0], [0.9, 10.0]]');

所以我可以用例如分解它json_array_elements():

SELECT id, json_array_elements(a) AS sub1 FROM t;

id | sub1
----------------
1 | [0.1, 2.0]
1 | [0.3, 4.0]
1 | [0.5, 6.0]
2 | [0.7, 8.0]
2 | [0.9, 10.0]

请注意,元素的数量可能会有所不同。现在我想用子元素做一些计算,比如:

SELECT id,
((json_array_elements(a)->>0)::FLOAT) *
((json_array_elements(a)->>1)::FLOAT) as result
FROM t

但是我收到错误:错误:函数和运算符最多只能接受一个集合参数。有什么提示吗?

最佳答案

使用(隐式) LATERAL join相反:

SELECT id, (e->>0)::float * (e->>1)::float as result
FROM t, json_array_elements(a) e

SELECT 中的集合返回函数在 PostgreSQL 中工作非常特殊:

错误的确切原因是,您试图将两个集合相乘(这是不允许的)。 PostgreSQL 可以计算<element> * <element> (将是单个值),<set> * <element> (反之亦然;将被设置值),但不是 <set> * <set> .

关于json - 如何计算嵌套在 Postgresql JSON 中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33738484/

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