题解 | #月均完成试卷数不小于3的用户爱作答的类别#
月均完成试卷数不小于3的用户爱作答的类别
https://www.nowcoder.com/practice/b1d13efcfa0c4ecea517afbdb9090845
select tag, count(tag) as tag_cnt from ( select b.tag from exam_record a, examination_info b where a.exam_id = b.exam_id and a.uid in ( select uid from ( select uid, date_format (start_time, '%Y%m') as start_time_ll, count(id) as ll from exam_record where submit_time is not null group by uid, start_time_ll having ll >= 3 ) tc ) ) tcc group by tag order by tag_cnt desc;
题意:
当月均完成试卷数”不小于3的用户们爱作答的类别及作答次数,按次数降序输出
1.先按照用户id和月份进行分组并计算它的完成数量(用提交时间是否为null判断是否完成)
2.按照条件筛选出不小于3的用户数,作为子查询条件来统计后续数量
3.采用group by子句进行分组记数
补充:
在MySQL中,查询的执行顺序通常遵循以下步骤: FROM子句:首先,MySQL会识别并从指定的表中获取数据。这可能涉及到多个表的JOIN操作。 WHERE子句:接下来,MySQL会根据WHERE条件筛选出满足条件的记录。只有符合条件的行才会进行后续处理。 GROUP BY子句:如果查询包括GROUP BY子句,MySQL会将记录分组,并根据指定的列进行分组操作。 HAVING子句:在GROUP BY之后,HAVING子句会对分组结果进行筛选,类似于WHERE子句的功能。 SELECT子句:接下来,MySQL会根据SELECT子句的指定,选择要返回的列,并计算任何聚合函数。 ORDER BY子句:如果查询包括ORDER BY子句,MySQL会根据指定的字段对结果进行排序。 LIMIT子句:最后,如果查询包括LIMIT子句,MySQL会根据指定的限制返回指定数量的记录。 需要注意的是,这只是一般情况下的查询执行顺序,并不适用于所有查询。一些特殊情况下的查询,例如使用子查询或嵌套查询,可能会涉及到更复杂的执行顺序。此外,MySQL还会根据查询的具体情况进行优化,以提高执行效率。