题解 | #各用户等级的不同得分表现占比#

注册当天就完成了试卷的名单第三页

http://www.nowcoder.com/practice/718d36d2667b48faa2168b6c1521816a

一、知识总结拓展&答案

1、知识点总结与拓展

就一个核心知识点,分页展示,查看第n页数据,每页m条的公式,该部分实际上是LIMIT (3-1)*3,3。 

2、完整代码

SELECT a.uid,level,register_time,MAX(score) max_score #每个用户的最高分
FROM exam_record a LEFT JOIN  user_info b ON a.uid=b.uid
WHERE DATE_FORMAT(submit_time,'%Y-%m-%d')=DATE_FORMAT(register_time,'%Y-%m-%d') #注册当天完成的试卷记录
AND exam_id IN(SELECT exam_id FROM examination_info WHERE tag='算法')#限定试卷为“算法”
AND a.uid IN (SELECT uid FROM user_info WHERE job='算法') #求职方向为工程师
GROUP BY a.uid
ORDER BY max_score DESC
LIMIT 6,3;# LIMIT (n-1)*m,m 查看第n页数据,每页m条的公式,该部分实际上是LIMIT (3-1)*3,3。 

二、步骤代码

1)找到求职方向为算法工程师,
SELECT uid FROM user_info WHERE job='算法';

2)且注册当天就完成了算法类试卷的人,
SELECT a.uid
FROM exam_record a LEFT JOIN  user_info b ON a.uid=b.uid
WHERE DATE_FORMAT(submit_time,'%Y-%m-%d')=DATE_FORMAT(register_time,'%Y-%m-%d') #注册当天完成的试卷记录
AND exam_id IN(SELECT exam_id FROM examination_info WHERE tag='算法')#限定试卷为“算法”
AND a.uid IN (SELECT uid FROM user_info WHERE job='算法');#求职方向为工程师

3)按参加过的所有考试最高得分的排名(用每个用户的历史考试最高分进行排名)。
SELECT a.uid,level,register_time,MAX(score) max_score #每个用户的最高分
FROM exam_record a LEFT JOIN  user_info b ON a.uid=b.uid
WHERE DATE_FORMAT(submit_time,'%Y-%m-%d')=DATE_FORMAT(register_time,'%Y-%m-%d') #注册当天完成的试卷记录
AND exam_id IN(SELECT exam_id FROM examination_info WHERE tag='算法')#限定试卷为“算法”
AND a.uid IN (SELECT uid FROM user_info WHERE job='算法') #求职方向为工程师
GROUP BY a.uid
ORDER BY max_score DESC;


4)排名榜很长,我们将采用分页展示,每页3条,现在需要你取出第3页(页码从1开始)的人的信息。
SELECT a.uid,level,register_time,MAX(score) max_score #每个用户的最高分
FROM exam_record a LEFT JOIN  user_info b ON a.uid=b.uid
WHERE DATE_FORMAT(submit_time,'%Y-%m-%d')=DATE_FORMAT(register_time,'%Y-%m-%d') #注册当天完成的试卷记录
AND exam_id IN(SELECT exam_id FROM examination_info WHERE tag='算法')#限定试卷为“算法”
AND a.uid IN (SELECT uid FROM user_info WHERE job='算法') #求职方向为工程师
GROUP BY a.uid
ORDER BY max_score DESC
LIMIT 6,3;# LIMIT (n-1)*m,m 查看第n页数据,每页m条的公式,该部分实际上是LIMIT (3-1)*3,3。 

SQL解题集 文章被收录于专栏

这是牛客SQL相关的解题集

全部评论
这里是有问题的,如果最高分不是算法试卷就错了,运行一下发现1008的最高分是98,但是题目里是99,所以逻辑还是不对的。
1 回复 分享
发布于 2024-08-15 17:45 湖北
使用group by不是只能查询聚合字段吗,你只聚合了uid,为什么能查出level和register_time
点赞 回复 分享
发布于 2024-08-28 11:35 广东
可以用max(score)over(partition by uid)来求参加过的所有考试最高得分吗?
点赞 回复 分享
发布于 2023-11-29 15:58 广东

相关推荐

评论
6
3
分享

创作者周榜

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