题解 | #SQL20 月均完成试卷数不小于3的用户爱作答的类别#

月均完成试卷数不小于3的用户爱作答的类别

https://www.nowcoder.com/practice/b1d13efcfa0c4ecea517afbdb9090845?tpId=240&tqId=2183022&ru=/activity/oj&qru=/ta/sql-advanced/question-ranking

SQL20 月均完成试卷数不小于3的用户爱作答的类别

明确题意:

统计月均完成试卷数不小于3的用户爱作答的类别及作答次数,按次数降序输出


问题拆解:

  • 筛选完成了的试卷的记录。知识点:where
  • 筛选月均完成数不小于3的用户。知识点:
    • 按用户分组group by uid;
    • 统计当前用户完成试卷总数count(exam_id);
    • 统计该用户有完成试卷的月份数count(distinct DATE_FORMAT(start_time, "%Y%m"))
    • 分组后过滤having count(exam_id) / count(distinct DATE_FORMAT(start_time, "%Y%m")) >= 3
  • 关联试卷作答记录表和试卷信息表。知识点:join examination_info using(exam_id)
  • 筛选满足条件的用户。知识点:where uid in (...)
  • 统计这些用户作答的类别及计数。知识点:按用户分组group by uid;计数count(tag);
  • 按次数降序输出。知识点:order by tag_cnt desc

代码实现:

select tag, count(tag) as tag_cnt
from exam_record
join examination_info using(exam_id)
where uid in (
    select uid
    from exam_record
    where submit_time is not null 
    group by uid
    having count(exam_id) / count(distinct DATE_FORMAT(start_time, "%Y%m")) >= 3
)
group by tag
order by tag_cnt desc
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论
count()不计算空值呀,为什么还要限定where submit_time is not null,求大佬解答,我筛选条件是这么写的也能通过where uid in( select uid from exam_record group by uid Having count(submit_time)/count(distinct date_format(submit_time,'%Y%m'))>=3 )
点赞 回复 分享
发布于 2022-07-27 14:42
这题完全就没看懂,麻了
8 回复 分享
发布于 2022-02-07 16:38
期望输出应该是3,2,1 而不是4,2,1吧
3 回复 分享
发布于 2022-03-16 17:18
楼主计算的是平均每个月的完成数,我的理解是单独计算每个月的完成数,当每个月都>=3时,才算是得到了正确的uid
3 回复 分享
发布于 2022-03-06 10:35
有个问题是,我们不是要求月均完成数目不小于3的用户吗?那么在子语句里面having count(exam_id)不应该改为having count(if(submit_time is null,null,1))吗?
3 回复 分享
发布于 2021-12-01 23:53
完成试卷数,怎么能用exam_id 呢,作答了不一定提交了,应该计算提交的才是完成的试卷。而且这个题干有歧义,“当月均完成...”到底是指各个月平均值还是每个月都完成的数,断句不一样含义就不同,出题人语文是体育老师教的吧
2 回复 分享
发布于 2022-09-29 19:37 北京
count(distinct DATE_FORMAT(start_time, "%Y%m")) >= 3 )这个如果有其他月份的话是不是全部计进去了?那就不算当月完成试卷数了吧?
2 回复 分享
发布于 2022-03-04 19:26
这题 having count(exam_id) / count(distinct DATE_FORMAT(start_time, "%Y%m")) >= 3 这个有啥用啊
1 回复 分享
发布于 2022-07-25 14:58
这个题实在是有点绕了, 符合条件的uid, 作答过的试卷, 即使没有提交的试卷也算在内,我麻了
1 回复 分享
发布于 2021-12-16 22:45
在表里添加了7月的非null数据,这个sql就会直接报错
点赞 回复 分享
发布于 2023-05-12 09:52 陕西
月均 和 当月均 应该是不一样的意思吧?如果月均指的是平均每月完成数,那为什么示例里面还要说是在2021年9月完成的数呢?有点不太懂
点赞 回复 分享
发布于 2023-05-11 18:35 浙江
通过tag分组后又count(tag)不是很理解
点赞 回复 分享
发布于 2023-03-21 11:05 广东
楼组算的是月均回答次数大于三的用户的吧
点赞 回复 分享
发布于 2023-03-21 11:01 广东
题目说的应该是每个月>3而不是平均每月大于3吧
点赞 回复 分享
发布于 2023-02-24 12:24 四川
我不知道是不是改了题目哈,我的的时候,是写的当月均完成试卷数。两个重点,当月、完成试卷数。当月需要group by date_format(start_time,'%Y%m'),完成试卷数需要count(submit_time)才对吧
点赞 回复 分享
发布于 2023-02-13 11:06 新疆
运行错误
点赞 回复 分享
发布于 2022-11-11 17:54 辽宁
假如有8,9,10月三个月,要求月均完成不小于3,这个月均是平均吗还是都完成的意思的呀
点赞 回复 分享
发布于 2022-08-28 10:29 浙江
第9行的'/'起到了一个什么作用
点赞 回复 分享
发布于 2022-07-18 09:45
为啥用count(date(start_time))和用count(date_format(start_time,'%Y-%m'))得出来的结果不一样呢
点赞 回复 分享
发布于 2022-06-30 13:46
count(id)那里换成count(score)为啥不可以呢
点赞 回复 分享
发布于 2022-04-04 22:17

相关推荐

评论
111
19
分享

创作者周榜

更多
牛客网
牛客企业服务