题解 | #考试分数(三)#

考试分数(三)

https://www.nowcoder.com/practice/b83f8b0e7e934d95a56c24f047260d91

/*
请你找出每个岗位分数排名前2名的用户,得到的结果先按照language的name升序排序,再按照积分降序排序,最后按照grade的id升序排序

1.每个岗位,分数前2名的用户--窗口函数按照岗位分区,分数排序,给予rank或者row_number
*/

select
t1.id1 as id,
t1.name1 as name,
t1.score1 as score
from
(
select
g.id as id1,
l.name as name1,
g.score as score1,
dense_rank()over(partition by l.name order by g.score desc) as t_rank
#根据示例,同一排名人数可大于1,故选dense_rank 不跳序号且可重复序号
from
grade g left join language l
on g.language_id = l.id) as t1
where t1.t_rank<=2
order by t1.name1 asc, t1.score1 desc, t1.id1 asc

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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