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

第二快/慢用时之差大于试卷时长一半的试卷

http://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166

首先是窗口函数的知识:

ROW_NUMBER()函数可以理解为排序号,不考虑并列;

RANK()函数也为排号,考虑并列,并列之后的按照实际序号来;

dense_rank()同样是排号,考虑并列,并列之后按下一个名次来。

排序方面就是根据最大分数,然后最小分数,然后uid排序,右连接exam_record表group by一下来去重


select
    p1.tag,
    p1.uid
    ,p1.ranking
from (
        SELECT
             distinct uid as uid,
             tag,
             row_number() over(partition by tag
             ORDER BY max(score) desc,min(score) desc ,uid desc )  AS ranking
        FROM
            examination_info e
            RIGHT JOIN
            exam_record r
        ON  e.exam_id = r.exam_id
        group by
            uid,tag
         ) AS p1
where p1.ranking < 4;

全部评论

相关推荐

2025-12-08 19:24
电子科技大学 Java
苗条的伊泽瑞尔最喜欢...:同28届被压力了,电科✌就不能去卷算法吗?把Java留给我们双非卷
投递快手等公司10个岗位
点赞 评论 收藏
分享
给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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