题解 | #满足条件的用户的试卷完成数和题目练习数#

满足条件的用户的试卷完成数和题目练习数

http://www.nowcoder.com/practice/5c03f761b36046649ee71f05e1ceecbf

SELECT exam_record.uid, COUNT(DISTINCT IF(YEAR(exam_record.submit_time)=2021,exam_record.id,NULL)) exam_cnt,
COUNT(DISTINCT IF(YEAR(practice_record.submit_time)=2021,practice_record.id,NULL)) question_cnt
FROM exam_record LEFT JOIN practice_record #要用左连接不能内连接
ON exam_record.uid=practice_record.uid
WHERE exam_record.uid IN (SELECT user_info.uid FROM user_info, exam_record
                          WHERE level=7 AND user_info.uid=exam_record.uid
                          AND exam_id IN (SELECT exam_id FROM examination_info WHERE tag='SQL' AND difficulty='hard')
                          GROUP BY user_info.uid
                          HAVING AVG(exam_record.score)>80)
GROUP BY exam_record.uid
ORDER BY exam_cnt,question_cnt DESC;

做得好曲折。

第一个错误点是把YEAR(exam_record.submit_time)=2021 AND YEAR(practice_record.submit_time)=2021 作为了WHERE后面的条件,这样会把2021年有exam记录的但是没有practice记录的过滤掉,不满足题目的要求。参考了别人的做法,在SELECT那里加条件做选择。其次注意要使用exam_record和practice_record左连接。

第二个错误点是“平均值大于80”,我错误的做法是先把exam_record和practice_record左连接后,再在WHERE后面加条件计算平均分:

WHERE exam_record.uid IN (SELECT uid FROM user_info WHERE level=7) AND 
exam_id IN (SELECT exam_id FROM examination_info WHERE tag='SQL' AND difficulty='hard')
GROUP BY exam_record.uid
HAVING AVG(exam_record.score)>80

这样错在把exam_record和practice_record左连接后,计算出来的平均成绩是错误的,因为exam_record和practice_record按照uid做了笛卡尔积,数据条数变多了,再按照uid分类算平均成绩算不对的。正确的做法是,用exam_record结合practice_record和user_info两个表中的“高难度SQL”和“7级的红名大佬”的条件,找出满足平均分大于80条件的uid,然后把它作为把刚刚左连接后表的约束,这样才能统计出正确的结果。

另有一个点的是要用COUNT(DISTINCT)来计算id,要用DISTINCT也是因为exam_record和practice_record做了笛卡尔积,数据条数变多了,没有DISTINCT就算重复了。

全部评论

相关推荐

手机爱睡觉:感觉是没hc了,上次双选hr说七月份就开了招了很多人
投递网易等公司10个岗位
点赞 评论 收藏
分享
rndguy:个人思路,抛砖引玉。 要我的话我先问清楚需求:要什么精度,什么速度,什么环境。 如果精度要求很低,平台也有点柔性的话,只需要输出pwm,然后开个中断记录各多少个脉冲,如果脉冲时间不对齐了就反馈控制电流加减就行。要求同步要求稍微高点的话可以在脉冲间做个线性插值,同步精度会高些。 但总体来说,如果直流有刷只有脉冲没有好的编码器的话很难做精准定位什么的(除非用一些电机磁路结构相关的奇技淫巧如高频注入什么的),所以要求更高就需要大量参数辨识和校准,那就慢多了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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