题解 | #刷题通过的题目排名#

刷题通过的题目排名

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

思路:我们根据题目给出的信息,就可以得知,我们需要自己构建一列用来对通过题目的数量大小进行排序,很容易就想到我们需要在 SELECT 上做文章

那么我们首先进行一个普通的查询,即

SELECT *
FROM passing_number
ORDER BY number

然后我们根据主查询提供的 number 来对我们需要构建的列进行思考:

首先是排序问题:

  1. 通过数量最大的,t_rank = 1,其实就是 pn2.number >= pn1.number 这个条件
  2. 排名相同的,t_rank 并列。 也就是说,我们需要对 pn2.number 进行去重,因为在第一个 pn2.number >= pn1.number 中,因为是大于等于,所以可能有多个相同的值,例如你通过数量为 5,大于你的有 7,6,6,等于你的有 5,5,5,你的排名应该是3,但是如果不去重的话,那你的排名就是 6 了

所以,根据上面的思考,我们得到如下结果:

SELECT pn1.*, 
(SELECT count(DISTINCT pn2.number) FROM passing_number pn2 WHERE pn2.number >= pn1.number) AS t_rank
FROM passing_number AS pn1
ORDER BY pn1.number DESC
SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

09-22 22:22
中山大学 Java
乌鱼子萨奇:羡慕你啊,直接转正了,都不用经历秋招的炼狱,但是你少经历了很多痛苦的事情啊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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