------------吾亦無他,唯手熟爾,謙卑若愚,好學若飢-------------
本次的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');
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