Mysql:查询每个月下的数据,根据状态或者年份的sql语句
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
本次的MySQL开篇记录了一道面试题,我给其扩展一下
这面试题它难点在什么地方,不外乎是操作月份和将其展示的格式问题,他要查每个月份下的状态,并将其横向展示
给本次博客列一个篇章,我要讲什么:
1.根据一个属性分组查每个月下数据的记录的个数
2.查每个月数据的记录的个数,根据年份分组
3.根据一个属性分组,查询每个月下某一属性的值的总和
4.查询每个月下某个属性的值的总和,根据年份分组
我给一个测试表,合起来了,需要用来测试的自己拿,就是上面的面试题的
DROP TABLE IF EXISTS `demo003`; CREATE TABLE `demo003` (
`question_code` varchar() DEFAULT NULL,
`flowcode` int() DEFAULT NULL,
`flowtype` varchar() DEFAULT NULL,
`duty_dept_name` varchar() DEFAULT NULL,
`create_person_name` varchar() 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 ('',,'待整改','感染科','刘某某','2017-08-17 16:02:06'),('',,'待整改','感染科','刘某某','2017-08-17 16:02:06'),('',,'待认领','保卫处','测试','2018-05-04 16:03:18'),('',,'待认领','保卫处','测试','2018-04-05 16:04:04'),('',,'待认领','保卫处','测试','2018-02-22 16:04:31'),('',,'待整改','保卫处','测试','2018-03-09 16:05:10'),('',,'待整改','总务处','测试','2017-11-29 16:05:52'),('',,'已关闭','总务处','测试','2017-10-18 16:06:18'),('',,'待整改','总务处','测试','2017-10-11 16:07:05'),('',,'待整改','总务处','测试','2018-02-28 16:07:39'),('',,'待整改','保卫处','测试','2018-02-13 16:08:12');
上面面试题的mysql表的sql脚本
1.首先我讲的是第一种,,根据某个属性分组,查每个月下数据的个数,就是我说的那道面试题的结果的写法
我把面试题答案合起来,把第一个种sql的写法格式展开,你们想看答案的,自己打开合起来的
SELECT flowcode,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 一月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 二月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 三月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 四月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 五月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 六月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 七月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 八月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 九月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 十月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE END) 十一月,
SUM(CASE WHEN MONTH(create_time) = THEN ELSE 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
Mysql:查询每个月下的数据,根据状态或者年份的sql语句的更多相关文章
- mysql 查询正在执行的事务以及等待锁 常用的sql语句
使用navicat测试学习: 首先使用set autocommit = 0;(取消自动提交,则当执行语句commit或者rollback执行提交事务或者回滚) 在打开一个执行update查询 正在 ...
- mysql查询随机几条数据(速度快)
MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE i ...
- mysql查询进程、导入数据包大小设置
mysql查询进程.导入数据包大小设置 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-12-27 查询正在执行的进程: ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- 数据库函数:sqlite3_exec() SQL语句
函数:sqlite3_exec(),称为便捷函数,封装了好多任务. 函数声明: int sqlite3_exec( sqlite * , const char * sql , sqlite_c ...
- 在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案。
在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计.SQL语句.java等层面的解决方案. 解答: 1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 whe ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- mysql查询表里的重复数据方法:
INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test ...
- mysql查询包含逗号的数据,并逗号拆分为多行展现
在做系统开发的时候,有可能是由于之前的遗留问题,导致在数据入库的时候,将多个数据以逗号分隔的实行,存储在一条数据中,例如: ID VALUE 1 yang,zheng,song 2 zhao,qian ...
随机推荐
- hive基本的操作语句(实例简单易懂,create table XX as select XX)
hive建表语句DML:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Cr ...
- ubuntu 的挂起与休眠
待机 计算机将目前的运行状态等数据存放在内存,关闭硬盘.外设等设备,进入等待状态.此时内存仍然需要电力维持其数据,但整机耗电很少.恢复时计算机从内存读 出数据,回到挂起前的状态,恢复速度较快.一般笔记 ...
- ARM linux常用汇编语法
汇编语言每行的语法: lable: instruction ; comment 段操作: .section 格式: .section 段名 [标志] [标志]可以 ...
- Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)
===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...
- ExtAspNet页面跳转的方法
一:如果在Page_Load中则可以用Response.Redirect("ABC.aspx"); 二:在其它事件中可以用以下方法: protected void Button1_ ...
- Demo4
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 前端技术之_CSS详解第四天
前端技术之_CSS详解第四天 一.第三天的小总结 盒模型box model,什么是盒子? 所有的标签都是盒子.无论是div.span.a都是盒子.图片.表单元素一律看做文本. 盒模型有哪些组成: wi ...
- 学习jQuery必须知道的几种常用方法
jQuery事件处理 ready(fn) 代码: $(document).ready(function(){ // Your code here...}): 作用:它可以极大地提高web应用程序的响 ...
- JavaScript 将两个数组合并,且删除重复的值
var a=[1,2,3,4,5,8,9,10]; var b=[6,7,8,9,10]; var c = a.concat(b);//合并成一个数组 console.log(c) temp = {} ...
- Colossus: Successor to the Google File System (GFS)
Colossus is the successor to the Google File System (GFS) as mentioned in the recent paper on Spanne ...