Mysql:查询每个月下的数据,根据状态或者年份的sql语句

 

 

 

 ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

 

本次的MySQL开篇记录了一道面试题,我给其扩展一下

 

 

这面试题它难点在什么地方,不外乎是操作月份和将其展示的格式问题,他要查每个月份下的状态,并将其横向展示

 

 

给本次博客列一个篇章,我要讲什么:

1.根据一个属性分组查每个月下数据的记录的个数

2.查每个月数据的记录的个数,根据年份分组

3.根据一个属性分组,查询每个月下某一属性的值的总和

4.查询每个月下某个属性的值的总和,根据年份分组

 

我给一个测试表,合起来了,需要用来测试的自己拿,就是上面的面试题的

 

DROP TABLE IF EXISTS `demo003`;

CREATE TABLE `demo003` (
  `question_code` varchar(225) DEFAULT NULL,
  `flowcode` int(225) DEFAULT NULL,
  `flowtype` varchar(225) DEFAULT NULL,
  `duty_dept_name` varchar(225) DEFAULT NULL,
  `create_person_name` varchar(225) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `demo003` */

insert  into `demo003`(`question_code`,`flowcode`,`flowtype`,`duty_dept_name`,`create_person_name`,`create_time`) values ('171026131',1,'待整改','感染科','刘某某','2017-08-17 16:02:06'),('171026132',1,'待整改','感染科','刘某某','2017-08-17 16:02:06'),('171019119',3,'待认领','保卫处','测试','2018-05-04 16:03:18'),('1710191110',0,'待认领','保卫处','测试','2018-04-05 16:04:04'),('1710191111',0,'待认领','保卫处','测试','2018-02-22 16:04:31'),('1710191112',2,'待整改','保卫处','测试','2018-03-09 16:05:10'),('1710191113',1,'待整改','总务处','测试','2017-11-29 16:05:52'),('1710191114',4,'已关闭','总务处','测试','2017-10-18 16:06:18'),('1710191115',1,'待整改','总务处','测试','2017-10-11 16:07:05'),('1710191116',1,'待整改','总务处','测试','2018-02-28 16:07:39'),('1710191117',1,'待整改','保卫处','测试','2018-02-13 16:08:12');
上面面试题的mysql表的sql脚本

 

 

1.首先我讲的是第一种,,根据某个属性分组,查每个月下数据的个数,就是我说的那道面试题的结果的写法

我把面试题答案合起来,把第一个种sql的写法格式展开,你们想看答案的,自己打开合起来的

 

SELECT flowcode,
SUM(CASE WHEN MONTH(create_time) =1 THEN 1 ELSE 0 END) 一月,   
SUM(CASE WHEN MONTH(create_time) =2 THEN 1 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(create_time) =3 THEN 1 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(create_time) =4 THEN 1 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(create_time) =5 THEN 1 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(create_time) =6 THEN 1 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(create_time) =7 THEN 1 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(create_time) =8 THEN 1 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(create_time) =9 THEN 1 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(create_time) =10 THEN 1 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(create_time) =11 THEN 1 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(create_time) =12 THEN 1 ELSE 0 END) 十二月,
COUNT(flowcode) 合计
FROM demo003
GROUP BY flowcode
面试题答案

 

他的书写格式为

 

SELECT 根据分组的属性,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =1 THEN 1 ELSE 0 END) 一月,   
SUM(CASE WHEN MONTH(表中记录的日期的属性) =2 THEN 1 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =3 THEN 1 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =4 THEN 1 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =5 THEN 1 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =6 THEN 1 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =7 THEN 1 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =8 THEN 1 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =9 THEN 1 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =10 THEN 1 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =11 THEN 1 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =12 THEN 1 ELSE 0 END) 十二月,
COUNT(*) 合计
FROM 表名
GROUP BY 根据分组的属性


###############################################33
#Then后面的一定是1,因为是查询的是记录的个数,和不是查询 记录的值的总和

 

 

 

 

2.查每个月数据的记录的个数,根据年份分组

格式:

 

SELECT YEAR(表中记录的日期的属性) 年度,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =1 THEN 1 ELSE 0 END) 一月,   
SUM(CASE WHEN MONTH(表中记录的日期的属性) =2 THEN 1 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =3 THEN 1 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =4 THEN 1 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =5 THEN 1 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =6 THEN 1 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =7 THEN 1 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =8 THEN 1 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =9 THEN 1 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =10 THEN 1 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =11 THEN 1 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =12 THEN 1 ELSE 0 END) 十二月,
COUNT(*) 合计
FROM 表名
 GROUP BY     YEAR(表中记录的日期的属性)

 

 

 

3.根据一个属性分组,查询每个月下某一属性的值的总和,一般用于统计钱的数量

格式:

 

SELECT 根据分组的属性,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =1 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 一月,   
SUM(CASE WHEN MONTH(表中记录的日期的属性) =2 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =3 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =4 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =5 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =6 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =7 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =8 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =9 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =10 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =11 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =12 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十二月,
SUM(要计算总和的列的属性,比如钱) 合计
FROM 表名
GROUP BY 根据分组的属性

 

 

4.查询每个月下某个属性的值的总和,根据年份分组

 

SELECT YEAR(表中记录的日期的属性) 年度,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =1 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 一月,   
SUM(CASE WHEN MONTH(表中记录的日期的属性) =2 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =3 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =4 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =5 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =6 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =7 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =8 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =9 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =10 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =11 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(表中记录的日期的属性) =12 THEN 要计算总和的列的属性,比如钱 ELSE 0 END) 十二月,
SUM(要计算总和的列的属性,比如钱) 合计
FROM 表名
GROUP BY YEAR(表中记录的日期的属性) 年度,

 

 

 

本章完,祝愿各位攻城狮都能更进百步

转载请注明出处:原作者:晨曦Dawn

原博客地址:http://www.cnblogs.com/DawnCHENXI/p/8781684.html

 

posted @ 2018-04-10 19:12  晨曦Dawn  阅读(5733)  评论(1编辑  收藏  举报