Oracle查询找到第二高

时间:2013-02-02 02:16:08

标签: sql oracle top-n

  

可能重复:
  select 2nd row in Plsql

我有这个数据库 电影(id:int,name:string,years:int,rating:fl oat)

movies_genres(movie_id:int,genre:string)

我需要找到 对于每种类型,找到第二好评的电影。这可以推广到 找到我评价的电影?

1 个答案:

答案 0 :(得分: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

- 编辑

我添加了GROUP BY rating,genre以删除潜在的重复项。正如@JW正确指出的那样,您也可以将ROW_NUMBER替换为可以为您处理分组的DENSE_RANK

祝你好运。