前言
Mysql中CASE表达式的使用,简单介绍下CASE经典的使用场景和例子
一、CASE表达式概述
CASE表达式的基本写法,CASE表达式有简单CASE表达式和搜索CASE表达式2种写法,示例如下:
--简单CASE表达式
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--搜索表达式
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
CASE表达式的注意事项:
- 统一各分支返回的数据类型
- 不要忘了写END
- 养成ELSE子句的习惯
二、使用场景和例子
1.有小类的具体数据,统计大类的总的数据情况
比如:有各市的人口数据,统计各省的总数据
城市 | 人口数量 |
---|---|
杭州市 | 100 |
宁波市 | 80 |
金华市 | 50 |
深圳市 | 100 |
广州市 | 200 |
上海市 | 100 |
需要的数据结果
省份 | 人口数量 |
---|---|
广东省省 | 300 |
浙江省 | 130 |
上海市市 | 100 |
SQL创建语句
CREATE TABLE `city_population` (
`city_name` varchar(32) NOT NULL DEFAULT '' COMMENT '城市名称',
`population` int(11) NOT NULL DEFAULT '0' COMMENT '人口数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL查询语句
SELECT
CASE city_name
WHEN '杭州市' THEN '浙江省'
WHEN '宁波市' THEN '浙江省'
WHEN '金华市' THEN '浙江省'
WHEN '深圳市' THEN '广东省'
WHEN '广州市' THEN '广东省'
ELSE'其他'
END AS province,
SUM(population) AS totalPopulation
FROM
city_population
GROUP BY
CASE city_name
WHEN '杭州市' THEN '浙江省'
WHEN '宁波市' THEN '浙江省'
WHEN '金华市' THEN '浙江省'
WHEN '深圳市' THEN '广东省'
WHEN '广州市' THEN '广东省'
ELSE'其他'
END
ORDER BY totalPopulation DESC
2.(行列转换)一条SQL语句进行不同条件的统计
比如:有市的男女人口数据,分别统计男女人数情况
城市 | 人口数量 | 性别 |
---|---|---|
杭州市 | 100 | 男 |
杭州市 | 80 | 女 |
金华市 | 50 | 男 |
金华市 | 100 | 女 |
深圳市 | 200 | 男 |
深圳市 | 100 | 女 |
需要的数据结果
城市 | 男 | 女 |
---|---|---|
杭州市 | 100 | 80 |
金华市 | 50 | 100 |
深圳市 | 200 | 100 |
SQL创建语句
CREATE TABLE `city_population2` (
`city_name` varchar(32) NOT NULL DEFAULT '' COMMENT '城市名称',
`population` int(11) NOT NULL DEFAULT '0' COMMENT '人口数',
`sex` varchar(16) NOT NULL DEFAULT '' COMMENT '性别:1:男,2:女'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL查询语句
SELECT
city_name,
-- 男性人口
SUM( CASE WHEN SEX = '1' THEN population ELSE 0 END ) AS cnt_m,
--女性人口
SUM( CASE WHEN SEX = '2' THEN population ELSE 0 END ) AS cnt_f
FROM
city_population2
GROUP BY
city_name;