zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    windows权限维持
    pocsuite3检测工具 编写poc
    php异或免杀
    python 多线程ftp爆破
    python ip查询 whois查询 # CDN查询# 子域名查询# 端口扫描
    python src批量爬取
    qykcms 审计
    dedecms审计
    EasySNS 审计
    zzcms审计
  • 原文地址:https://www.cnblogs.com/DawnCHENXI/p/8781684.html
Copyright © 2011-2022 走看看