[英]How to order a json column in postgres
所以我有一個具有以下結構的 jsonb 列:
{
"fields": [{
"name": "John",
"position": 1
},{
"name": "Mike",
"position": 2
}]
}
jsonb 列在我的“人”表中。 我想 select 人表,包括 jsonb 列,但我也希望 jsonb 列按“位置”降序排列,這可能嗎?
到目前為止,我有這個查詢。
SELECT
person_id
name
jsonb_agg(field ORDER BY field->'fields'->0->>'position' DESC)
FROM
person
WHERE (
person_id = 42
) GROUP BY name
假設表person
具有以下結構和數據:
CREATE TABLE person (person_id, name, field) AS
VALUES
(
42,
'foo',
'{
"fields": [
{ "name": "John", "position": 1 },
{ "name": "Mike", "position": 2 }
]
}'::jsonb
),
(
13,
'bar',
'{
"fields": [
{ "name": "Anne", "position": 33 },
{ "name": "Melinda", "position": 66 }
]
}'::jsonb
);
首先,您必須將數組元素作為單獨的行獲取,以便能夠對它們進行排序(內部查詢data
)。 然后,您必須重建 JSON object:
SELECT
person_id,
name,
jsonb_build_object(
'fields',
jsonb_agg(element ORDER BY element->'position' DESC)
)
FROM (
SELECT
person_id,
name,
jsonb_array_elements(field->'fields') AS element
FROM person
) data
WHERE person_id = 42
GROUP BY
person_id,
name;
這將產生:
person_id | name | jsonb_build_object
-----------+------+--------------------------------------------------------------------------------
42 | foo | {"fields": [{"name": "Mike", "position": 2}, {"name": "John", "position": 1}]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.