0
我有這個數據庫 電影(ID:INT,名稱:字符串,年:INT,等級:FL燕麥)
movies_genres(movie_id:INT,類型:字符串)
我需要網絡連接nd 對於每個類型,找到第二最佳評級電影。這可以推廣到 找到我的評級電影?
我有這個數據庫 電影(ID:INT,名稱:字符串,年:INT,等級:FL燕麥)
movies_genres(movie_id:INT,類型:字符串)
我需要網絡連接nd 對於每個類型,找到第二最佳評級電影。這可以推廣到 找到我的評級電影?
考慮使用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
,這將爲您處理分組。
祝你好運。
我寧願使用[DENSE_RANK](http://www.oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions.php#dense_rank),因爲它確定重複': D' –
@JW。 - 如果OP想要包含電影名稱,請發表評論。然而,由於OP只是希望體裁/最高排名,我認爲ROW_NUMBER()的工作也是如此:)但好點。 – sgeddes
但你將如何處理這些記錄?流派「,」10,1「,」11,2「,」11,3「,」12,4「。你將如何獲得第二高的評價?你會只返回一個記錄嗎? –