暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kingbaseES order by自定义排序案例

金小仓 2020-10-30
2897

kingbaseES order by自定义排序案例

MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序。
函数使用格式如下:

order by (str,str1,str2,str3,str4……),str与str1,str2,str3,str4比较,其中str指的是字段名字,
意为:字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3,str4中的记录,放在结果集最前面返回。

对于kingbaseES数据库没有专门的函数来做order by的自定义排序,但可以通过在order by之后用case when 或 decode来做自定义排序。

测试案例:

数据库版本:

prod=# select version();
version


Kingbase V008R003C002B0061 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64
-bit
(1 row)

测试数据表:
prod=# \dt
List of relations
Schema | Name | Type | Owner
--------±------------±------±-------
PUBLIC | NEWPRODUCTS | table | system
PUBLIC | PRODUCTS | table | system
PUBLIC | PROVINCES | table | system
PUBLIC | t1 | table | system
PUBLIC | test1 | table | system
(5 rows)

默认排序:
prod=# select * from t1 order by name;
id | name
----±-----
10 | a
20 | b
30 | c
(3 rows)

decode自定义排序:
prod=# select * from t1 order by decode(name,‘b’,1,‘c’,2,‘a’,3);
id | name
----±-----
20 | b
30 | c
10 | a
(3 rows)

可以使用desc排序

prod=# select * from t1 order by decode(name,‘b’,1,‘c’,2,‘a’,3) desc;
id | name
----±-----
10 | a
30 | c
20 | b
(3 rows)

case when自定义排序:
prod=# select * from t1 order by
prod-# case
prod-# when name=‘b’ then 1
prod-# when name=‘a’ then 2
prod-# when name=‘c’ then 3
prod-# end;
id | name
----±-----
20 | b
10 | a
30 | c
(3 rows)

prod=# select * from t1 order by
prod-# case
prod-# when name=‘b’ then 1
prod-# when name=‘a’ then 2
prod-# when name=‘c’ then 3
prod-# end
prod-# desc
prod-# ;
id | name
----±-----
30 | c
10 | a
20 | b
(3 rows)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论