SQL中CASE表达式的使用
SQL中CASE表达式的使用
文章目录
前言
一、CASE表达式概述
二、使用场景和例子
1.有小类的具体数据,统计大类的总的数据情况
2.(列行转换)一条SQL语句进行不同条件的统计
前言
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
1
2
3
4
5
6
7
8
9
10
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;
1
2
3
4
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
1
2
3
4
5
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;
————————————————
版权声明:本文为CSDN博主「代码人生121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhj445977480/article/details/116097150