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

考试分数(三)

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

因为题目是要获得每个岗位分数前两名的用户,所以先通过子查询对每个岗位进行分数排名。
SELECT  id,
	language_id,
        score,
	DENSE_RANK() OVER(PARTITION BY language_id ORDER BY score DESC ) AS rank_number
FROM grade
因为根据题目意思,分数一样算作并列,第二名会继续向下取,因此使用dense_rank()函数进行排序。


随后将子查询生成的表t和language进行多表查询,匹配对应的岗位名称。
通过限制rank_number <= 2来找到分数前两名的用户。
SELECT  t.id,
        t1.name,
        t.score
FROM
(
	SELECT  id,
	        language_id,
            score,
	        DENSE_RANK() OVER(PARTITION BY language_id ORDER BY score DESC ) AS rank_number
    FROM grade
) AS t, language AS t1
WHERE 
    t.language_id = t1.id
    AND t.rank_number <= "2"
ORDER BY t1.name, t.score DESC



全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 18:18
是不是意味着秋招就完蛋了
花不开柳成荫:如果你是Java,是的
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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