题解 | #月总刷题数和日均刷题数#

月总刷题数和日均刷题数

http://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746

代码一: 可以检测通过,但是总是会在第一次报错,重复运行就不会有问题 (其中主要关键点: SELECT中的元素,包括函数使用 在使用了GROUP BY 之后,应该是需要包含或者依赖于这个分组元素的,不然就会于MYSQL 中sql_mode=only_full_group_by 冲突; 因此后续添加了 MAX()函数,而且由于 原表中没有 submit_month,虽然GOROUP BY也可以引用,但是于DATE_FORMAT(submit_time,'%Y%m') 相比较,其意义不同--一个是submit_month/submit_time)

select DATE_FORMAT(submit_time,'%Y%m') submit_month,
count(question_id) month_q_cnt,
ROUND(count(question_id)/MAX(day(LAST_DAY(submit_time))),3) avg_day_q_cnt 
from practice_record
where DATE_FORMAT(submit_time,'%Y')='2021'
group by DATE_FORMAT(submit_time,'%Y%m')
union ALL

SELECT '2021汇总' as submit_month,
count(question_id) month_q_cnt,
round(count(id)/31,3) avg_day_q_cnt
from practice_record
where DATE_FORMAT(submit_time,'%Y')='2021'
order by submit_month
;

代码二: 自己运行的时候可以通过,提交代码后总会多出现一行 202108月的统计(计算也不对),然后报错;一直没有找出来问题所在?? 第二个代码的思路是---没有那个指标就创造那个指标然后嵌套使用; alt

SELECT submit_mounth, COUNT(1) as month_q_cnt, ROUND(COUNT(1)/md,3) as avg_day_q_cnt
FROM 
(
    SELECT DATE_FORMAT(submit_time,'%Y%m') as submit_mounth,  question_id,
           day(last_day(submit_time)) as md
    FROM practice_record
) b
GROUP BY submit_mounth ,md


union ALL

SELECT '2021汇总' as submit_month,
count(question_id) month_q_cnt,
round(count(id)/31,3) avg_day_q_cnt
from practice_record
where DATE_FORMAT(submit_time,'%Y')='2021'
order BY submit_mounth  # 这块排序是为了后面对比的时候比较方便
全部评论
你子查询忘记过滤出2021的数据了,多的那一行是202008的数据不是202108😂
2 回复 分享
发布于 2022-03-07 19:04
感谢! 的确是我那块忘记筛选出错的;添加2021的条件就好了;感谢指正
点赞 回复 分享
发布于 2022-03-11 15:38

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务