簡體   English   中英

如何在Postgres中對我的Json數組進行排序

[英]How Do Sort My Json Array in Postgres

我有一個排序的Json數組:

_bb = 

[
  {
    "so": "1",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "2",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "1",
    "mdl": "FlashSale",
    "pos": "Bottom"
  }
]

我正在使用此Common表表達式來分組和排列'pos'。

with j(_bb) as (values(_con))
, ord(o,v) as (values(1,'Top'),(2,'Left'),(3,'Content'),(4,'Right'),(5,'Bottom'))
, un as (select *,jsonb_array_elements(_con) i from j)
select jsonb_agg(i order by o) from un
join ord on v=i->>'pos' into _test;

我想要實現的是根據“ pos”值對訂單進行分組和安排之后。 我也想根據它們的“ so”值來排列它們。 _test返回基於'pos'的排序值。

這是我要實現的目標:

[
  {
    "so": "1",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "2",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "1",
    "mdl": "FlashSale",
    "pos": "Bottom"
  },
   {
    "so": "2",
    "mdl": "FlashSale",
    "pos": "Bottom"
  }
]

我找到了解決方案。 我只需要通過i->>'so'添加另一個訂單

   with j(_bb) as (values([
  {
    "so": "1",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "2",
    "mdl": "Testing",
    "pos": "Top"
  },
  {
    "so": "1",
    "mdl": "FlashSale",
    "pos": "Bottom"
  },
   {
    "so": "2",
    "mdl": "FlashSale",
    "pos": "Bottom"
  }
]::jsob))
    , ord(o,v) as (values(1,'Top'),(2,'Left'),(3,'Content'),(4,'Right'),(5,'Bottom'))
    , un as (select *,jsonb_array_elements(_bb) i from j)
    select jsonb_agg(i order by o,i->>'so') from un
    join ord on v=i->>'pos';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM