MySQL知识汇总:MySQL函数CASE WHEN用法详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL知识汇总:MySQL函数CASE WHEN用法详解

Case When的两种简单用法

用法一:

CASE 
   season
   WHEN  'Spring'  THEN '春天' 
   WHEN  'Summer'  THEN '夏天' 
   WHEN  'autumn'  THEN '秋天' 
   else  '冬天'
end

用法二:

CASE WHEN season= 'Spring' THEN '春天'
     WHEN season= 'Summer' THEN '夏天'
     WHEN season= 'autumn' THEN '秋天' 
     else '冬天' 
     END

注意一: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

注意的是:我们甚至可以基于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

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

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

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

国家(country)    人口(population)
中国    600
美国    100
加拿大    100
英国    200
法国    300
日本    250
德国    200
墨西哥    50
印度    250

想要解决这个问题,你会怎么做?生成一个带有洲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;

注释:

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

CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END

这个子句整体看作一列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;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
JSON 关系型数据库 MySQL
Mysql(5)—函数
MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类,包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。
70 1
Mysql(5)—函数
|
2月前
|
关系型数据库 MySQL 索引
mysql中EXISTS用法注意点
mysql中EXISTS用法注意点
|
13天前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
|
16天前
|
存储 SQL NoSQL
|
16天前
|
SQL NoSQL 关系型数据库
|
1月前
|
存储 SQL 关系型数据库
MySQL 存储函数及调用
MySQL 存储函数及调用
54 3
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 满足条件函数中使用查询最大值函数
MySQL 满足条件函数中使用查询最大值函数
120 1
|
2月前
|
存储 SQL 关系型数据库
MySQL基础:函数
本文介绍了MySQL中几种常用的内建函数,包括字符串函数、数值函数、日期函数和流程函数。字符串函数如`CONCAT()`用于拼接字符串,`TRIM()`用于去除字符串两端的空格,`MOD()`求余数,`RAND()`生成随机数,`ROUND()`四舍五入。日期函数如`CURDATE()`返回当前日期,`NOW()`返回当前日期和时间,`DATE_ADD()`添加时间间隔,`DATEDIFF()`计算日期差。流程函数如`IF()`和`CASE WHEN THEN ELSE END`用于条件判断。聚合函数如`COUNT()`统计行数,`SUM()`求和,`AVG()`求平均值
29 8
MySQL基础:函数
|
1月前
|
存储 SQL 关系型数据库
mysql用法
mysql用法
39 4
|
27天前
|
关系型数据库 MySQL 数据库
mysql中tonumber函数使用要注意什么
在处理这类转换操作时,考虑周全,利用提供的高性能云服务器资源,可以进一步提升数据库处理效率,确保数据操作的稳定性和安全性,尤其是在处理大量数据转换和运算密集型应用时。
84 0