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 ...
随机推荐
- Xshell Linux 主要命令
1. 查看当前路径 pwd 2.列出当前目录的文件 ls 列出所有文件或者文件夹 ls *abc 列出以abc开头的所以文件 ls –l 列出所以文件及其详细详细 3.进入目录 cd ...
- 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中 ...
- Hbase节点管理
1.退役节点 (1) shell>balance_switch false 然后,hbase-daemon.sh stop regionserver (2) graceful_stop.sh U ...
- Dijkstra算法 c语言实现
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...
- ZYThumbnailTableView类似于小型阅读器
Demo github地址: https://github.com/liuzhiyi1992/ZYThumbnailTableView 原文地址:http://zyden.vicp.cc/zythu ...
- mybatis 开发环境搭建
不说废话直接上代码,首先看下我的目录机构: 红色部分,表明你所需的jar包,已经配置文件. 创建用户表,以及插入数据. create table books(id int (11) not null ...
- LeetCode(54)-Longest Common Prefix
题目: Write a function to find the longest common prefix string amongst an array of strings. 思路: 题意:找出 ...
- Oracle :%TYPE 和 %ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- 棋盘的完美覆盖问题,c++代码实现
#include "stdafx.h" #include<iostream> #include<iomanip> using namespace std; ...
- Visual Studio 2013创建自定义多项目模版
首先附上效果图: 可以看到输入解决方案名称后,自动创建了我事先写好的架构,并且项目名及Server层名称都变了,并且依然保持了引用关系. 下面讲具体步骤: 第一步:建立解决方案,并将需要的代码全部写好 ...