PostgreSql:使用横向联接将Json数组转换为行

问题描述 投票:0回答:1

我在表的详细信息字段中有以下两个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

join和json_array_elements_text将json数组转换为行。

我在表的详细信息字段中有以下两个JSON数组,并且需要像在另一个关系表中使用的那样评估查询。 {“ city”:“伦敦”,“ name”:“ Sainburry”,“ quantities”:[...

sql arrays json postgresql postgresql-9.5
1个回答
0
投票

这是您想要的吗?

© www.soinside.com 2019 - 2024. All rights reserved.