题解 | #每类试卷得分前3名#

每类试卷得分前3名

http://www.nowcoder.com/practice/255aa1863fe14aa88694c09ebbc1dbca

SELECT
t.tag,
 t.uid,
t.m
from(
select
e2.tag,
e1.uid,
dense_rank()over(partition by e2.tag order by max(e1.score) desc,min(e1.score) desc,e1.uid desc)  as m 
from exam_record e1 left join examination_info e2 on e1.exam_id=e2.exam_id
group by e2.tag,e1.uid
) as t 
WHERE
t.m<=3

看似简单,其实挺陷阱的,这种题型也挺少见的
按照 tag 进行分组,按照每个人最大分,最小分及用户ID排序
因为有聚合函数要分组
group by tag 和 uid  每个人的TAG 最高分 最小分等

全部评论

相关推荐

dian3b:挺妙的,如果上纲上线显得不合人心,但是这样以来既能监督适当摸鱼,也有一定的人文关怀。
摸鱼被leader发现了...
点赞 评论 收藏
分享
12-27 22:28
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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