mysql求当月有多少天
描述
现有一张题目练习记录表practice_record,示例内容如下:
id | uid | question_id | submit_time | score |
1 | 1001 | 8001 | 2021-08-02 11:41:01 | 60 |
2 | 1002 | 8001 | 2021-09-02 19:30:01 | 50 |
3 | 1002 | 8001 | 2021-09-02 19:20:01 | 70 |
4 | 1002 | 8002 | 2021-09-02 19:38:01 | 70 |
5 | 1003 | 8002 | 2021-08-01 19:38:01 | 80 |
请从中统计出2021年每个月里用户的月总刷题数month_q_cnt 和日均刷题数avg_day_q_cnt(按月份升序排序)以及该年的总体情况,示例数据输出如下:
submit_month | month_q_cnt | avg_day_q_cnt |
202108 | 2 | 0.065 |
202109 | 3 | 0.100 |
2021汇总 | 5 | 0.161 |
解释:2021年8月共有2次刷题记录,日均刷题数为2/31=0.065(保留3位小数);2021年9月共有3次刷题记录,日均刷题数为3/30=0.100;2021年共有5次刷题记录(年度汇总平均无实际意义,这里我们按照31天来算5/31=0.161)
牛客已经采用最新的Mysql版本,如果您运行结果出现错误:ONLY_FULL_GROUP_BY,意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。
示例1
输入:
drop table if exists practice_record; CREATE TABLE practice_record (id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',uid int NOT NULL COMMENT '用户ID',question_id int NOT NULL COMMENT '题目ID',submit_time datetime COMMENT '提交时间',score tinyint COMMENT '得分' )CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO practice_record(uid,question_id,submit_time,score) VALUES (1001, 8001, '2021-08-02 11:41:01', 60), (1002, 8001, '2021-09-02 19:30:01', 50), (1002, 8001, '2021-09-02 19:20:01', 70), (1002, 8002, '2021-09-02 19:38:01', 70), (1003, 8002, '2021-08-01 19:38:01', 80);
复制输出:
202108|2|0.065 202109|3|0.100 2021汇总|5|0.161
求当月有多少天:
day(last_day(curdate()))
group by 后 day(last_day(submit_time)) 是多个值 所以要用 avg() 聚合
(select
date_format(submit_time,'%Y%m') submit_month ,count(1) month_q_cnt,round(count(1)/avg(day(last_day(submit_time))),3) avg_day_q_cnt
from
practice_recordwhere year(submit_time) = 2021
group by date_format(submit_time,'%Y%m')) union all
select
'2021汇总',count(id),round(count(id)/31,3)
from
practice_record
where year(submit_time) = 2021
order by submit_month
mysql求当月有多少天相关推荐
- mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天
mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...
- Mysql 获取当月和上个月第一天和最后一天
Mysql 获取当月和上个月第一天和最后一天的解决方案 获取当前日期 select curdate(); 获取当月最后一天 select last_day(curdate()): 获取本月的第一天 s ...
- JavaScript求当月天数
上面是我写的,刚才在网上看到一段更精悍的写法: // 求当月天数 function maxDay(){ var d = new Date(); return new Date(d.getFullYea ...
- mysql 求数据的长度_mysql 如何求数据的长度
mysql求数据长度的方法:1.使用"LENGTH"函数来获取字符串长度,语法如"SELECT LENGTH('字符')":2.通过"CHAR_LEN ...
- 根据日期计算当月有多少天
-- 1.删除测试用表 IF OBJECT_ID (N ' Test ' , N ' U ' ) IS NOT NULL DROP TABLE Test -- 2.建立测 ...
- N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法?
算法题:N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法? 平常不怎么研究算法,直到一次面试后,面试官给我了一个算法题,因为平常没有去看过类似的东西,所以就做错了 根据上面的题目 ...
- mysql 求平均数 (AVG聚合函数)
mysql 求平均数 (AVG聚合函数) SELECT ROUND(AVG(score),3) AS 平均分 FROM grade AVG:平均数 聚合函数 ROUND:四舍五入 3:保留三位小数
- LeetCode149. 直线上最多的点数: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------- ...
- 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
需求:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 分析思路: 1.将所有点二维坐标化,即定义出所有点的x,y坐标值 2.遍历出所有取出两点的情况(不考虑先后顺序),根据任意 ...
最新文章
- mysql “group by ”与order by的研究--分类中最新的内容
- 用php写shell,php与shell实现多线程的简单例子
- c# 自定义控件之小小进度条
- Linux下修改python pip镜像源:推荐豆瓣源
- vue2.0 仿手机新闻站(七)过滤器、动画效果
- jQuery 基础教程 (四)之jQuery中的DOM操作
- 基于Docker的Redis集群简单搭建
- Spark学习之路 (六)Spark Transformation和Action
- [转载] python 常用类库!
- java 反射 获取Class对象的三种方式
- 思科网院-网络简介----Packet Tracer交换机使用的基本操作
- Masscan——端口扫描
- 俱乐部/会所/协会在短信平台应用指南
- “第二课堂”开课啦~
- git fatal: unable to access '/': schannel: next InitializeSecurityContext error (0x80092013)
- 网络丢包问题的原因及解决办法
- 如何进行远程会议及在线演示
- 计算机网络(Computer Networking)基础知识--第一章--计算机网络和因特网
- androidStudio gralde zip version 问题
- 20230503-win10-U盘安装WIN10-22h2