可能重复:
在 Plsql 中选择第二行
我有这个数据库电影(id:int,name:string,years:int,rating:float)
电影流派(movie_id:int,流派:字符串)
我需要找到对于每种类型,找到评分第二好的电影。这可以推广到找到第 i 部评分的电影吗?
可能重复:
在 Plsql 中选择第二行
我有这个数据库电影(id:int,name:string,years:int,rating:float)
电影流派(movie_id:int,流派:字符串)
我需要找到对于每种类型,找到评分第二好的电影。这可以推广到找到第 i 部评分的电影吗?
研究使用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
which 将为您处理分组。
祝你好运。