mysql按照月份统计数据(CASE表达式)

       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语句的简洁性。

猜你喜欢

转载自blog.csdn.net/cs373616511/article/details/107204033
今日推荐