2013-02-02 45 views
0

可能重複:
select 2nd row in PlsqlOracle查詢找到第二高

我有這個數據庫 電影(ID:INT,名稱:字符串,年:INT,等級:FL燕麥)

movies_genres(movie_id:INT,類型:字符串)

我需要網絡連接nd 對於每個類型,找到第二最佳評級電影。這可以推廣到 找到我的評級電影?

回答

3

考慮使用ROW_NUMBER()

SELECT rating maxrating, genre 
FROM (
    SELECT 
    rating, 
    genre, 
    ROW_NUMBER() OVER (PARTITION BY genre ORDER BY rating DESC) rn 
FROM movies_genres mg 
    JOIN movies m1 ON mg.movie_id=m1.movie_id 
GROUP BY rating,genre 
) t 
WHERE rn = 2 

這裏是SQL Fiddle

--edit

我添加GROUP BY rating,genre以除去可能的重複。正如@JW正確指出的那樣,您還可以用DENSE_RANK替換ROW_NUMBER,這將爲您處理分組。

祝你好運。

+0

我寧願使用[DENSE_RANK](http://www.oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions.php#dense_rank),因爲它確定重複': D' –

+1

@JW。 - 如果OP想要包含電影名稱,請發表評論。然而,由於OP只是希望體裁/最高排名,我認爲ROW_NUMBER()的工作也是如此:)但好點。 – sgeddes

+0

但你將如何處理這些記錄?流派「,」10,1「,」11,2「,」11,3「,」12,4「。你將如何獲得第二高的評價?你會只返回一個記錄嗎? –