首页 > 解决方案 > 如何根据 jsonb 列值对数据进行排序

问题描述

我有一个包含 4 列的表,其中一列(id)的数据类型为 jsonb。我需要在此列中对值进行排序。样本数据:

name     age    zip      id
----------------------------------------------------------------
abc      25     11111    ["2722", "2855", "3583", "2722", "2855"]
SELECT (t2.id ->> 'x')::numeric 
FROM table t2

我试图获取排序后的值,然后在内部查询中使用它,但上面的查询返回 null。

我希望结果显示为:

name     age    zip      id
----------------------------------------------------------------
abc      25     11111    ["2722", "2722", "2855", "2855","3583"]

标签: arraysjsonpostgresql

解决方案


正如@a_horse_with_no_name 所说,您必须拆分数组,然后将其重新组合在一起:

SELECT name, 
       age, 
       zip, 
       jsonb_agg(ids ORDER BY ids) 
FROM (
  SELECT name, 
         age, 
         zip, 
         jsonb_array_elements(id) as ids 
  FROM test) AS sub
GROUP BY name, age, zip;
 name | age |  zip  |                jsonb_agg
------+-----+-------+------------------------------------------
 abc  |  25 | 11111 | ["2722", "2722", "2855", "2855", "3583"]

推荐阅读