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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM