基本排序
置顶单行数据并将其他数据排序
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的数据,并将其他数据优先以时间倒叙排序,如果时间一样,按照名称倒序排序
- ordey by 后面根据 ‘,’ 区分多个条件,并由左到右进行优先级排序
分组条件判断统计
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】