[英]How do I ORDER BY a JSON Array with its String Values?
我有一个简单的JSON数组:
_bb jsonb =
[
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "FlashSale",
"pos": "Bottom"
},
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
}
]
我想要实现的目标:
[
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "FlashSale",
"pos": "Bottom"
}
]
我试过了
Select _bb into _test ORDER BY _bb->>'pos' ASC ;
我实现的是所有pos =“Top”是JSON中的第一个,而所有的“Bottom”都是最后一个。 有没有办法在Postgres实现这一目标?
with j(_bb) as (values('[
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "FlashSale",
"pos": "Bottom"
},
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
}
]'::jsonb))
, ord(o,v) as (values(1,'Top'),(2,'Bottom'))
, un as (select *,jsonb_array_elements(_bb) i from j)
select jsonb_agg(i order by o) from un
join ord on v=i->>'pos'
;
结果如下:
[
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "Testing",
"pos": "Top"
},
{
"so": "1",
"mdl": "FlashSale",
"pos": "Bottom"
}
]
不用说你必须为所有值建立订单矩阵,例如:
, ord(o,v) as (values(1,'Top'),(2,'Middle'),(3,'Bottom'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.