說前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