case when的使用场景。

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

 

分析说明

    1. 简单case函数是case搜索函数的真子集
      • 简单case函数的使用方法与一些高级语言(如:java)中的switch语句相似:CASE给定匹配字段,WHEN给出具体的字段值,如果匹配到后返回THEN值。
      • 简单case函数其实就是case搜索函数的‘=’逻辑的实现。case搜索函数可以实现简单case函数的所有功能,而简单case函数却不可实现case搜索函数的‘=’逻辑以外的功能。
    2. case函数匹配原则
      • case函数与switch的不同在于case仅返回第一个匹配到的结果,而switch则会在没有中断的情况下继续后面的判断,将会执行所有匹配的结果。
    3. case搜索函数比简单case函数更加灵活
      • case搜索函数与简单case函数相比的灵活之处在于可以在WHEN中书写判断式。

 

 

1、等值转换

SELECT user_name,( CASE WHEN sex = 0 THEN '男人' WHEN sex = 1 THEN '女人' ELSE '中性人' END ) AS 性别   FROM   imooc_goddess;

SELECT user_name,( CASE sex WHEN 0 THEN '男人' WHEN 1 THEN '女人' ELSE null END ) AS 性别  FROM   imooc_goddess;

2、范围转换

select user_name, (case when age BETWEEN 0 and 18 then '未成年' when age BETWEEN 18 and 30 then '成年' when age BETWEEN 30 and 50 then '中年人' else '老年人' end) as 年龄段
FROM imooc_goddess;

 

select user_name,(case when age>0 and age<=18 then '未成年' when age >18 and age<=30 then '成年' when age >30 and age<=50 then '中年人' else '老年人' end) as 年龄段 FROM  imooc_goddess;

 

3、行转列

select name , (case when sub = 'english' then score else 0 end ) 'english' ,
(case when sub = 'maths' then score else 0 end) 'maths' ,
(case when sub = 'chinese' then score else 0 end) 'chinese'
FROM stu;

 

select name , sum((case when sub = 'english' then score else 0 end )) 'english' ,
sum((case when sub = 'maths' then score else 0 end)) 'maths' ,
sum((case when sub = 'chinese' then score else 0 end)) 'chinese'
FROM stu GROUP BY name ;

 

1.IF

  表达式:IF( expr1 , expr2 , expr3 )

  expr1条件,条件为true,则值是expr2 ,false,值就是expr3

2. IFNULL

  表达式:IFNULL( expr1 , expr2)

  在 expr1 的值不为 NULL的情况下都返回 expr1,否则返回 expr2

 

参考:https://blog.csdn.net/changxiangyangy/article/details/86718551?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

https://blog.csdn.net/WuZuoDingFeng/article/details/53523176?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param

原文地址:https://www.cnblogs.com/brianlai/p/13524543.html