【发布时间】:2020-08-25 19:12:05
【问题描述】:
我的表的详细信息字段中有两个以下 JSON 数组,需要评估查询,因为我在另一个关系表中使用。
{
"city": "London",
"name": "Sainburry",
"quantities": [112, 145, 222, 122, 124],
"prices": [4, 4, 4, 0, 3],
"dates": ["13.05.2020", "14.05.2020", "15.05.2020", "16.05.2020", "17.05.2020"]
}
我想为此 JSON 数组评估以下查询:
select quantities,
prices,
AVG(quantities/prices::float) as ratio
from my_table
where city = 'London'
group by quantities, prices;
我使用了以下查询和许多类似的查询,包括横向连接:
select q.*
from my_table mt
cross join json_array_elements_text(details -> 'quantities') as q
但是,当通过交叉连接将其他字段(价格和日期)添加到查询中时,行数会成倍增加。所以,我正在寻找一个新功能Lateral Join 来使用,但无法正确应用。如何在PostgreSQL中使用Lateral Join获得我之前查询的结果?任何帮助将不胜感激。
更新:
这里是fiddle。如果我成功地将 json 数组值转换为行而不进行相乘(应返回 5 条记录),我可以评估所需的结果。只需帮助我使用 lateral 连接和 json_array_elements_text 将 json 数组转换为行。
【问题讨论】:
-
group by quantities, prices -
这里是fiddle。如果我成功地将 json 数组值转换为行而不进行乘法(应该返回 5 条记录),我可以评估所需的结果。只需帮助我使用 lateral 连接和 json_array_elements_text 将 json 数组转换为行。
-
所以
quantities和prices按索引相互评价对方?他们总是有相同数量的元素? -
数量、价格和日期。它们始终具有相同数量的元素,并且彼此对应。例如,对于第一个:112、4、“13.05.2020”。 ...
-
quantities、prices和dates是否保证始终具有相同数量的数组元素?升级到当前版本的 Postgres 是一种选择吗?第 9.5 页即将发布:postgresql.org/support/versioning
标签: sql arrays json postgresql postgresql-9.5