说前N行,如果我有一个表下面列,甲骨文选择基于价值
Marks
60
80
70
90
95
90
70
我需要在顶部4,选择所有带有标记的行,即。在这种情况下,应该返回> = 70和6行。
我不知道如何做到这一点,有人可以帮忙吗?谢谢。
说前N行,如果我有一个表下面列,甲骨文选择基于价值
Marks
60
80
70
90
95
90
70
我需要在顶部4,选择所有带有标记的行,即。在这种情况下,应该返回> = 70和6行。
我不知道如何做到这一点,有人可以帮忙吗?谢谢。
SELECT Marks FROM (
SELECT Marks, DENSE_RANK() OVER (ORDER BY Marks DESC) AS MarksRank
FROM yourtable
) WHERE MarksRank <= 4
我相信你需要使用RANK()而不是DENSE_RANK(),因为你想要四个不同的Mark值,它们应该返回6示例中的行。 – tylert 2013-05-03 15:14:41
@tylert使用'RANK()'只会给你4个记录在这种情况下。 – 2013-05-03 15:17:27
准确地说 - 用'RANK()'这个等级将被分配如下:95 = 1,90 = 2,90 = 2,80 = 4,70 = 5等等。注意它是如何从90 = 2变成80 = 4:90并列第二,所以80下降到第四位。 'DENSE_RANK'将摆脱排名中的差距:95 = 1,90 = 2,90 = 2,80 = 3,70 = 4等。 – 2013-05-03 15:21:05
这个网站上已经有很多这个问题的变种。 – Lion 2013-05-03 15:10:21
加上这个非常有趣的网站。 http://www.oracle-base.com/articles/misc/top-n-queries.php – 2013-05-03 15:11:24