当前位置:   article > 正文

MySQL知识汇总:MySQL函数CASE WHEN用法详解_mysql中case when

mysql中case when

在这里插入图片描述

Case When的两种简单用法

用法一:

CASE 
	 season
	 WHEN  'Spring'  THEN '春天' 
	 WHEN  'Summer'  THEN '夏天' 
	 WHEN  'autumn'  THEN '秋天' 
	 else  '冬天'
end 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

用法二:

CASE WHEN season= 'Spring' THEN '春天'
     WHEN season= 'Summer' THEN '夏天'
     WHEN season= 'autumn' THEN '秋天' 
     else '冬天' 
     END
  • 1
  • 2
  • 3
  • 4
  • 5

注意一:then和else之后的数据都是要进行放到同一个列一下的数据,所以这些数据类型要一致,否则SQL执行会报错的。
注意二:case when可以对非本列进行when的操作,也就是基于对别的column的计算来选择本column的值。

Case When的几个实例由浅入深

场景一:60岁以下上班,60-80退休,80以上死亡,其他为非人类

SELECT
    age,
    (CASE WHEN age >=0 AND age< 60 THEN '上班'
       	  WHEN age >= 60 AND age < 80 THEN '退休'
          WHEN age >= 80 THEN '死亡'
          ELSE '非人类' 
          END) AS target
FROM
	person
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意的是:我们甚至可以基于case when语句或者他的别名进行分组

SELECT
    max(age),
    (CASE WHEN age >=0 AND age< 60 THEN '上班'
       	  WHEN age >= 60 AND age < 80 THEN '退休'
          WHEN age >= 80 THEN '死亡'
          ELSE '非人类' 
          END) AS target
FROM
	person group by 
		  CASE WHEN age >=0 AND age< 60 THEN '上班'
       	  WHEN age >= 60 AND age < 80 THEN '退休'
          WHEN age >= 80 THEN '死亡'
          ELSE '非人类' 
          END
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

场景二:并配合聚合函数做统计,统计各个城市的各类能耗

在这里插入图片描述

SELECT 
	E_CODE,
	SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗
	SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗
	SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
FROM 
	THTF_ENERGY_TEST
GROUP BY
	E_CODE
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

场景三:统计各个大洲共计有多少人口

国家(country)    人口(population)
中国    600
美国    100
加拿大    100
英国    200
法国    300
日本    250
德国    200
墨西哥    50
印度    250
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下:

SELECT  SUM(population),
        CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注释:
上述语句可以这样理解,将

CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这个子句整体看作一列A,则 上述语句就是一句普通的分组语句了:SELECT SUM(population), A FROM Table_A GROUP BY A;

场景四:同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数

SQL代码如下:

SELECT
        CASE WHEN salary <= 500 THEN '1'
             WHEN salary > 500 AND salary <= 600  THEN '2'
             WHEN salary > 600 AND salary <= 800  THEN '3'
             WHEN salary > 800 AND salary <= 1000 THEN '4'
        ELSE NULL END salary_class,
        COUNT(*)
FROM    Table_A
GROUP BY
        CASE WHEN salary <= 500 THEN '1'
             WHEN salary > 500 AND salary <= 600  THEN '2'
             WHEN salary > 600 AND salary <= 800  THEN '3'
             WHEN salary > 800 AND salary <= 1000 THEN '4'
        ELSE NULL END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/485247
推荐阅读
相关标签
  

闽ICP备14008679号