重複の可能性:
Plsqlの2番目の行を選択します
私はこのデータベース映画を持っています(id:int、name:string、years:int、rating:float)
movies_genres(movie_id:int、genre:string)
ジャンルごとに、2番目に評価の高い映画を見つける必要があります。これを一般化して、i番目に評価された映画を見つけることはできますか?
重複の可能性:
Plsqlの2番目の行を選択します
私はこのデータベース映画を持っています(id:int、name:string、years:int、rating:float)
movies_genres(movie_id:int、genre:string)
ジャンルごとに、2番目に評価の高い映画を見つける必要があります。これを一般化して、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 が正しく指摘しているように、グループ化を処理する which に置き換えることもできROW_NUMBER
ますDENSE_RANK
。
幸運を。