Mysql:查询每个月下的数据,根据状态或者年份的sql语句

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本次的MySQL开篇记录了一道面试题,我给其扩展一下     这面试题它难点在什么地方,不外乎是操作月份和将其展示的格式问题,他要查每个月份下的状态,并将其横向展示     给本次博客列一个篇章,我要讲什么: 1.

 

 

 

 ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

 

本次的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

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
SQL 关系型数据库 MySQL
mysql 简单的sql语句,入门级增删改查
介绍MySQL中的基本SQL语句,包括数据的增删改查操作,使用示例和简单的数据表进行演示。
mysql 简单的sql语句,入门级增删改查
|
26天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
212 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
11天前
|
SQL 资源调度 数据库
深入探究SQL查询语句执行过程
深入探究SQL查询语句执行过程
27 2
|
11天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
21 1
|
19天前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
42 7
|
25天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
34 2
|
10天前
|
SQL 存储 缓存
MySQL 是怎么执行 SQL 语句的?
MySQL 是怎么执行 SQL 语句的?
16 0
|
13天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
15天前
|
SQL
SQL: 巧妙使用CASE WHEN实现查询
文章演示了如何利用SQL中的CASE WHEN语句来有效地进行条件性聚合查询,通过具体示例展示了CASE WHEN在统计分析中的应用技巧。
36 0
|
SQL 存储 索引