CASE 表达式是 SQL 里非常重要而且使用起来非常便利的技术,我们应该学会用它来描述条件分支。
本节将通过行列转换、已有数据重分组(分类)、与约束的结合使用、针对聚合结果的条件分支等例题,
来介绍 CASE 表达式的用法。
引自《SQL进阶教程》
一、数据表
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `nameIndex` (`name`),
FULLTEXT KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 |
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (1, 'zhangsan', '2020-06-01 23:23:52', '1');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (2, 'lisi', '2020-06-01 23:23:52', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (3, 'wangwu', '2020-07-01 23:23:52', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (4, 'zhaosi', '2020-05-01 23:23:52', '2');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (5, 'libai', '2020-07-08 13:33:38', '0');
INSERT INTO `demo`.`demo`(`id`, `name`, `create_time`, `sex`) VALUES (6, 'bajie', '2020-04-01 13:34:53', '1');
二、需求
根据下面用户表,统计最近2个月创建的用户数,其他月份创建用户显示“其他”
统计结果
三、SQL语句
1.CASE 表达式的写法
简单 CASE 表达式
CASE sex
WHEN ' 1 ' THEN ' 男 '
WHEN ' 0 ' THEN ' 女 '
ELSE ' 其他 ' END
2.针对需求写出如下sql
SELECT CASE
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-07' THEN '2020-07'
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-06' THEN '2020-06'
ELSE '其他'
END AS month, COUNT(create_time) AS num
FROM demo
GROUP BY CASE
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-07' THEN '2020-07'
WHEN DATE_FORMAT(create_time, '%Y-%m') = '2020-06' THEN '2020-06'
ELSE '其他'
END
ORDER BY create_time DESC
说明:如果遇到没有数据月份也要显示,可以使用代码解决,保持sql语句的简洁性。