描述

现有一张题目练习记录表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求当月有多少天相关推荐

  1. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  2. Mysql 获取当月和上个月第一天和最后一天

    Mysql 获取当月和上个月第一天和最后一天的解决方案 获取当前日期 select curdate(); 获取当月最后一天 select last_day(curdate()): 获取本月的第一天 s ...

  3. JavaScript求当月天数

    上面是我写的,刚才在网上看到一段更精悍的写法: // 求当月天数 function maxDay(){ var d = new Date(); return new Date(d.getFullYea ...

  4. mysql 求数据的长度_mysql 如何求数据的长度

    mysql求数据长度的方法:1.使用"LENGTH"函数来获取字符串长度,语法如"SELECT LENGTH('字符')":2.通过"CHAR_LEN ...

  5. 根据日期计算当月有多少天

    -- 1.删除测试用表 IF   OBJECT_ID (N ' Test ' , N ' U ' )  IS   NOT   NULL      DROP   TABLE  Test -- 2.建立测 ...

  6. N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法?

    算法题:N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法? 平常不怎么研究算法,直到一次面试后,面试官给我了一个算法题,因为平常没有去看过类似的东西,所以就做错了 根据上面的题目 ...

  7. mysql 求平均数 (AVG聚合函数)

    mysql 求平均数 (AVG聚合函数) SELECT ROUND(AVG(score),3) AS 平均分 FROM grade AVG:平均数 聚合函数 ROUND:四舍五入 3:保留三位小数

  8. LeetCode149. 直线上最多的点数: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------- ...

  9. 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    需求:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 分析思路: 1.将所有点二维坐标化,即定义出所有点的x,y坐标值 2.遍历出所有取出两点的情况(不考虑先后顺序),根据任意 ...

最新文章

  1. mysql “group by ”与order by的研究--分类中最新的内容
  2. 用php写shell,php与shell实现多线程的简单例子
  3. c# 自定义控件之小小进度条
  4. Linux下修改python pip镜像源:推荐豆瓣源
  5. vue2.0 仿手机新闻站(七)过滤器、动画效果
  6. jQuery 基础教程 (四)之jQuery中的DOM操作
  7. 基于Docker的Redis集群简单搭建
  8. Spark学习之路 (六)Spark Transformation和Action
  9. [转载] python 常用类库!
  10. java 反射 获取Class对象的三种方式
  11. 思科网院-网络简介----Packet Tracer交换机使用的基本操作
  12. Masscan——端口扫描
  13. 俱乐部/会所/协会在短信平台应用指南
  14. “第二课堂”开课啦~
  15. git fatal: unable to access '/': schannel: next InitializeSecurityContext error (0x80092013)
  16. 网络丢包问题的原因及解决办法
  17. 如何进行远程会议及在线演示
  18. 计算机网络(Computer Networking)基础知识--第一章--计算机网络和因特网
  19. androidStudio gralde zip version 问题
  20. 20230503-win10-U盘安装WIN10-22h2

热门文章

  1. Mysql的undo log详解
  2. 【拼车小程序源码推荐】方便省力快速搭建首选人人拼车CMS系统
  3. 甲骨文考虑收购市值775亿美元的埃森哲
  4. 2022年网络安全六大趋势预测
  5. 使用CAD看图如何打印图纸的部分内容?
  6. 转:多巴胺导致过程大于结果
  7. Cris 的 Python 数据分析笔记 08:NumPy 和 Pandas 整理脑图
  8. jdbc连接oracle连接重置问题
  9. asp毕业设计——基于asp+access的博客网站设计与实现(毕业论文+程序源码)——博客网站
  10. C#向带有书签的word模板自动填充内容的方法