Sql多条件排序

Posted 大象踢足球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql多条件排序相关的知识,希望对你有一定的参考价值。

多条件排序可以通过在order by语句后面使用case when then条件语句来实现。

select * from 表名 ORDER BY case when 条件 then 0 else 1 end

 

例子:

1.创建表case_test

共有id,case_type,case_location,case_way四个字段。

2.导入数据:

INSERT INTO "XIANGZH"."case_test" VALUES (\'1\', \'盗窃案\', \'台东\', \'技术开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'88\', \'谋杀案\', \'台东\', \'技术开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'99\', \'盗窃案\', \'江西路\', \'技术开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'5\', \'盗窃案\', \'台东\', \'暴力开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'6\', \'盗窃案\', \'江西路\', \'暴力开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'7\', \'谋杀案\', \'台东\', \'暴力开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'8\', \'谋杀案\', \'江西路\', \'技术开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'9\', \'谋杀案\', \'江西路\', \'暴力开锁\');
INSERT INTO "XIANGZH"."case_test" VALUES (\'10\', \'盗窃案\', \'台东\', \'技术开锁\');

未排序截图:

 

3.多条件分组排序

select * from "case_test" ORDER BY 
case when "case_type"=\'盗窃案\' then 0 else 1 end,
case when "case_location" = \'台东\' then 0 else 1 end,
case when "case_way" = \'技术开锁\' then 0 else 1 end ASC

查询结果是按照条件分组排序(先按case_type排序,再按case_location排序,最后按case_way排序),结果截图:

 

 4.满足条件个数排序 

select * from "case_test" ORDER BY 
case 
when "case_type"=\'盗窃案\' and "case_location" = \'台东\' and "case_way" = \'技术开锁\' then 0
when "case_type"=\'盗窃案\' and "case_location" = \'台东\' then 1
when "case_type"=\'盗窃案\' and "case_way" = \'技术开锁\' then 2
when "case_location" = \'台东\' and "case_way" = \'技术开锁\' then 3
when "case_type"=\'盗窃案\' then 4
when "case_location" = \'台东\' then 5
when "case_way" = \'技术开锁\' then 6
else 7
end

查询结果是按照满足条件的个数排序,截图:

 

如果有更合理的sql写法,欢迎留言讨论。

 

参考:

ORACLE按条件排序的例子

Oracle怎么按条件排序

 

以上是关于Sql多条件排序的主要内容,如果未能解决你的问题,请参考以下文章

sql多条件分组查询,求sql语句。

SQL中多值匹配多值,并按匹配个数排序。

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取

Laravel 5.8 有条件地插入 sql 片段

自动刷新android片段,直到满足条件