Ngi*_*giW 5 postgresql json postgresql-9.6
我有以下 json 存储在 jsonb 字段中。对于代表产品的每条记录,它包含各种类别,每个类别中的 a 是优先级。
[
{
"priority": 0,
"description": "",
"categoryName": "Cars",
"title": ""
},
{
"priority": 1,
"description": "",
"categoryName": "Trucks",
"title": ""
},
{
"priority": 2,
"description": "",
"categoryName": "Vans",
"title": ""
}
]
Run Code Online (Sandbox Code Playgroud)
我想使用优先级字段动态地按各种类别对数据进行排序,这样,如果我显示类别 Cars 中的所有产品,我将按 0 数组元素排序,如果我显示类别 Vans 中的所有产品, 我按 2 数组元素排序。
目前,要按第一个数组元素排序,我可以这样做:
ORDER BY OBJECT_DATA->'productCategories'->0->>'priority'
Run Code Online (Sandbox Code Playgroud)
但是,我想通过首先选择数组值 ( categoryName
) 然后使用数组值来选择其优先级来排序。
例如:按卡车排序->优先级 (1)
我正在使用 PostgresSQL 9.6。
从您的代码段假设显示JSON是一个关键的值"productCategories"
在jsonb
列object_data
的表格tbl
,就可以实现这样的你想要的排序顺序:
SELECT t.*
FROM tbl t
LEFT JOIN LATERAL (
SELECT elem->>'priority' AS prio
FROM jsonb_array_elements(t.object_data->'productCategories') a(elem)
WHERE elem->>'categoryName' = 'Trucks' -- your category here
) a ON true -- preserve all rows from t
ORDER BY prio; -- NULL values are sorted last
Run Code Online (Sandbox Code Playgroud)
详细解释的相关答案:
归档时间: |
|
查看次数: |
7187 次 |
最近记录: |