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

查询结果是按照条件分组排序,截图:

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怎么按条件排序

时间: 2024-08-03 03:56:19

Sql多条件排序的相关文章

[玩转SQL]:02 条件语句与排序

SELECT 更高的用法可以使用WHERE提供查询条件. WHERE语句 语法: SELECT * | {[DISTINCT] column|expression [alias]...} FROM   table [WHERE condition(s)]; 通过WHERE后边子句的表达返回True or False来判断是否满足条件. WHERE子句不可以使用别名. WHERE通常跟在FROM后边. --查询deparment_id为90的列 SELECT employee_id,last_na

Mysql->order by SQL 根据多个条件排序

Mysql中根据多个条件排序:(各个条件间使用逗号隔开) 首先根据class_name字符串长短升序排列,然后根据开始时间降序排列: [php] view plain copy SELECT * FROM signup_class s ORDER BY IFNULL(length(trim(s.class_name)),0) ASC,s.date_start DESC 注释: trim(s.class_name):去除字符串中的空格 length(trim(s.class_name):去除空格后

不简单的SQL查询和排序语句

真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [ORDER BY <排序的列名>[ASC或DESC]] eg1: SELECT               SCode,SName,SAddress FROM   Students WHERE               SSEX = 0 ORDER BY   SCode 二:查询所有列和行: eg:

Oracle order by case when 多条件排序

ORACLE sql 排序 根据两个条件排序,根据id号由小到大排序,同时country字段是北京的排最前面前面,其次上海,..大连,最后是其他城市,怎么写? 写法如下:select * from proviceorder by (case when country='北京' then 0 when country='上海' then 1 when country='广东' then 2 when country='深圳' then 3 when country='杭州' then 4 when

Map按照条件排序输出

需求: /** * Map进行多条件排序输出* 水果具有好吃不好吃难吃属性.* 入口Map * 首先按照好吃不好吃难吃排序* 然后按照水果的标志Id排序* 出口Map * * 2016年8月14日*/ 1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.HashMap; 5 import java.util.Iterator;

Entity Framework 多条件排序与分页的实现

项目过程中遇到需要对数据源进行多条件排序的情况, 开始觉得很简单,分分钟搞定,当时的逻辑大概是将排序条件以及是否倒序写入Dictionary中,在方法中遍历此Dictionary进行排序(下面的方法附带了分页,其实觉得耦合度太高,感觉还是都分开比较好) public IQueryable<T> GetListByPage<S>(int pageSize, int pageIndex, out int pageCount, Expression<Func<T, bool&

Linq to Sql 多条件查询

Linq To Sql 多条件查询 string proName = this.txtName.Text.Trim();string lowPrice = this.txtLowPrice.Text.Trim();string highPrice = this.txtHighPrice.Text.Trim(); decimal? lowPrice1 = null, highPrice1 = null;if (!string.IsNullOrEmpty(lowPrice)){        low

Javascript 迭代法实现数组多条件排序

多条件排序可能有很多种思路,效率也各不相同,我的方法可能只适合自己用,毕竟目的是为了实现功能,所以采用了最笨的方法,不过效果还是很理想的,经过多次测试,6列1000行数据,平均排序时间大约是:28ms. 具体实现代码如下: function isArr(data) { return ({}).toString.call(data) == '[object Array]'; } function getIndex(arr) { var i = 0, len = arr.length keys =

【转】SQL多条件模糊查询解决方案-存储过程

前言:   算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新. 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅. l 目的:主要用于多条件模糊匹配. l 贪婪特性:返回满足条件尽可能多的记录. l 权重特性:为关键词分配权重,代表关键词的重要性,在不破坏贪婪特性的前提下,返回权重高的记录. l 必要关键词指定特性:在不破坏贪婪特性和权重特性的前提下,返回的结果中必须包含指定的关键词. l 典型应用:问-答系统,例如