这是表格:
StuId Name Class Marks
-----------------------------
2003 aman X-A 91
2005 ankita X-A 89
2010 Aakash X-A 87
2011 Cyril X-A 87
2012 Bala X-B 87
2013 Sara X-C 89
2014 Katlyn X-C 89
2015 Casy X-C 87
2016 Katie X-B 93
我需要输出表为:
StuId Name Class Marks Rank
-----------------------------------
2003 aman X-A 91 1
2005 ankita X-A 89 2
2010 Aakash X-A 87 3
2011 Cyril X-A 87 3
2016 Katie X-B 93 1
2012 Bala X-B 87 2
2013 Sara X-C 89 1
2014 Katlyn X-C 89 1
2015 Casy X-C 87 3
为此我执行了以下查询:
SELECT *,
RANK() OVER (PARTITION BY Class ORDER BY Marks DESC) AS Rank
FROM StudentTable;
但是如何在不使用 Rank()
的情况下获得相同的结果? ?
最佳答案
您可以尝试使用相关子查询,该子查询对同一“类”中更高或相等的标记使用不同的计数。
SELECT *,
(
SELECT COUNT(DISTINCT s2.Marks)
FROM StudentTable s2
WHERE s2.Class = s.Class
AND s2.Marks >= s.Marks
) AS Rank
FROM StudentTable s
ORDER BY Class, Marks DESC;
可以找到测试db<>fiddle here
但是RANK会更有效率。
关于sql - 没有 Rank() 的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517030/