2013-02-02 91 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“。你将如何获得第二高的评价?你会只返回一个记录吗? –