SQL中CASE表达式的使用及场景


前言

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表达式的注意事项:

  1. 统一各分支返回的数据类型
  2. 不要忘了写END
  3. 养成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

需要的数据结果

城市
杭州市10080
金华市50100
深圳市200100

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值