我在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] <==
有没有办法实现它?
答案 0 :(得分:0)
这样做的一种方法就像
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
您可以在查询中定义自己的自定义排序逻辑。
答案 1 :(得分:0)
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]"
"[]"