思路:我们根据题目给出的信息,就可以得知,我们需要自己构建一列用来对通过题目的数量大小进行排序,很容易就想到我们需要在 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