select * from tb_schedule_zy order by (case schedule_id when '1' then 0 else 1 end) asc, create_time desc, schedule_name desc
置顶id为1的数据,并将其他数据优先以时间倒叙排序,如果时间一样,按照名称倒序排序
case ... when ...测试:
根据字段分组统计
SELECT CASE WHEN dev_group_id <= 10 THEN '1' WHEN dev_group_id > 10 AND dev_group_id <= 20 THEN '2' WHEN dev_group_id > 20 AND dev_group_id <= 30 THEN '3' WHEN dev_group_id > 30 AND dev_group_id <= 40 THEN '4' ELSE NULL END scount, COUNT(*) FROM tb_auth_detail_all GROUP BY CASE WHEN dev_group_id <= 10 THEN '1' WHEN dev_group_id > 10 AND dev_group_id <= 20 THEN '2' WHEN dev_group_id > 20 AND dev_group_id <= 30 THEN '3' WHEN dev_group_id > 30 AND dev_group_id <= 40 THEN '4' ELSE NULL END; -- 输出 scount count NULL 160187 2 9859 4 9983 3 9996 1 9975 select count(*) from tb_auth_detail_all where dev_group_id <= 10 -- 输出 count 9975
总结:
- Case具有两种格式。简单Case函数和Case搜索函数。
-- 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END -- Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
- Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
-- 比如说,下面这段SQL,你永远无法得到“第二类”这个结果 CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类' WHEN col_1 IN ('a') THEN '第二类' ELSE'其他' END
- Case函数用途 分组(分析)、条件过滤执行语句、排序置顶数据、简化sql、检查表数据是否一致等,详见【1】