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

考试分数(三)

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



全部评论

相关推荐

11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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