Arrays 使用json_数组_元素(json)并获取项目等级
我有一个由两级数组组成的json,如:Arrays 使用json_数组_元素(json)并获取项目等级,arrays,json,postgresql,Arrays,Json,Postgresql,我有一个由两级数组组成的json,如: [ { name: "Group one", races: [ {name: "Race 1"}, {name: "Race 2"}, ] }, { name: "Group two", races: [ {name: "Race 10"}, {name: "Race 11"}, ] } ] 是否可以通过magic SQL获得: g
[
{
name: "Group one",
races:
[
{name: "Race 1"},
{name: "Race 2"},
]
},
{
name: "Group two",
races:
[
{name: "Race 10"},
{name: "Race 11"},
]
}
]
是否可以通过magic SQL获得:
group_num | race_num | race
int | int | json
1 | 1 | {name: "Race 1"}
1 | 2 | {name: "Race 2"}
2 | 1 | {name: "Race 10"}
2 | 2 | {name: "Race 11"}
其中:
是每个组在其数组中的排名group_num
是数组中每个种族的排名race_num
json\u array\u elements(json)
和row\u number()OVER()
有关,但我不知道如何正确处理它
with my_table(data) as (
values(
'[
{
"name": "Group one",
"races":
[
{"name": "Race 1"},
{"name": "Race 2"}
]
},
{
"name": "Group two",
"races":
[
{"name": "Race 10"},
{"name": "Race 11"}
]
}
]'::json)
)
select
group_num,
rank() over (partition by group_num order by value->>'name') as race_num,
value as race
from (
select
rank() over (order by value->>'name') as group_num,
value as grp
from my_table,
json_array_elements(data)
) s,
json_array_elements(grp->'races');
结果:
group_num | race_num | race
-----------+----------+---------------------
1 | 1 | {"name": "Race 1"}
1 | 2 | {"name": "Race 2"}
2 | 1 | {"name": "Race 10"}
2 | 2 | {"name": "Race 11"}
(4 rows)
注意,您的json无效,请用于验证json表达式。如何在json上运行SQL?或者你从哪里得到的JSON?您是否运行了一个现有的查询来获取该信息?