[SQL] CASE...WHEN 进行排序和分组

2021/6/9 19:25:09

本文主要是介绍[SQL] CASE...WHEN 进行排序和分组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SQL CASE…WHEN 进行排序和分组

基本排序

置顶单行数据并将其他数据排序

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】

REFRENCES

  1. SQL中的case when then else end用法


这篇关于[SQL] CASE...WHEN 进行排序和分组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程