【问题标题】:Customize jsonb key sort order自定义 jsonb 键排序顺序
【发布时间】:2016-06-23 18:02:52
【问题描述】:

我在 PostgreSQL 中有一个包含一些数据的表:

create table t2 (
    key jsonb,
    value jsonb
);

insert into t2(key, value) values ('1', '"test 1"');
insert into t2(key, value) values ('2', '"test 2"');
insert into t2(key, value) values ('3', '"test 3"');
insert into t2(key, value) values ('[]', '"test 4"');
insert into t2(key, value) values ('[1]', '"test 5"');
insert into t2(key, value) values ('[2]', '"test 6"');
insert into t2(key, value) values ('[3]', '"test 7"');
insert into t2(key, value) values ('[1, 2]', '"test 8"');
insert into t2(key, value) values ('[1, 2, 3]', '"test 9"');
insert into t2(key, value) values ('[1, 3]', '"test 10"');
insert into t2(key, value) values ('[1,2,4]', '"test 11"');
insert into t2(key, value) values ('[1, 2,4]', '"test 12"');
insert into t2(key, value) values ('[1,3,13]', '"test 13"');
insert into t2(key, value) values ('[1, 2, 15]', '"test 15"');

我尝试像这样对这些行进行排序:

SELECT key FROM t2 order by key;

结果是:

[]
1
2
3
[1]
[2] <==
[3] <==
[1, 2]
[1, 3] <==
[1, 2, 3]
[1, 2, 4]
[1, 2, 4]
[1, 2, 15]
[1, 3, 13]

但我需要的是

[]
1
2
3
[1]
[1, 2]
[1, 2, 3]
[1, 2, 4]
[1, 2, 4]
[1, 2, 15]
[1, 3] <==
[1, 3, 13]
[2] <==
[3] <==

有没有办法实现它?

【问题讨论】:

    标签: sql postgresql jsonb


    【解决方案1】:

    混合类型会有些麻烦,您可能并不是说只有三个值 :) 但仍然是一个想法:

    SELECT key FROM t2 order by (key->>0)::text::int,(key->>1)::int ,(key->>2)::int;
    

    将给出: "[1, 2, 3]" "[1, 2, 4]" "[1, 2, 4]" "[1, 2, 15]" "[1, 2]" "[1, 3, 13]" "[1, 3]" "1" "[1]" "2" "[2]" "3" "[3]" "[]"

    【讨论】:

      【解决方案2】:

      这样做的一种方法是

      SELECT * FROM t2
      ORDER BY case when key= '[]'  then 1
      when key= '1'  then 2
      when key= '2'  then 3
      when key= '3'  then 4
      when key= '[1]'  then 5
      when key= '[1, 2]'  then 6
      when key= '[1, 2, 3]'  then 7
      when key='[1, 2, 15]' then 8
      when key='[1, 3]' then 9
      when key='[1, 3, 13]' then 10
      when key='[2]' then 11
      when key= '[3]'  then 12    
      end asc
      

      您可以在查询中定义自己的自定义排序逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-12
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多