2016-05-10 5 views
1

データベース "Films"には、名前、年(1980-2015)、および映画の評価(1-10)の列が含まれています。私だけのような複数のクエリでそれを行う方法を考えることができますSQL内の複数のクエリから1つのクエリ

The Beutiful Mind 2001 rating: 8.2 
Catch Me If You Can 2002 rating: 8.0 

: 私のような毎年の最高の映画を取得したいと思い

SELECT * 
FROM movies 
WHERE year = 2001 
ORDER BY imdb_rating DESC 
LIMIT 1; 

SELECT * 
FROM movies 
WHERE year = 2002 
ORDER BY imdb_rating DESC 
LIMIT 1; 

など

どのように私がすることができますSQLで1つのクエリでそれを達成できますか?何が最善の方法ですか?または、この場合複数のクエリに問題はありませんか?助けてくれてありがとう:)

+0

同じ年に10のレーティングが2つある場合はどうなりますか? – Webeng

+0

SQL Serverには 'limit'がありませんので、タグとして削除しました。 –

+0

これはmysqlまたはsqlserverですか?あなたは両方のタグを付けました。 – SQLChao

答えて

2
select name, year from (
select 
    name, year, 
    row_number() over (partition by year order by rating desc) as rt 
from movies) RankTab 
where rt = 1 

SQL Fiddle sample

3

一つの方法は、where句でサブクエリを使用することです:

select m.* 
from movies m 
where m.imdb_rating = (select max(m2.rating) from movies m2 where m2.year = m.year); 
0
SELECT name, year, MAX(rating) FROM Films WHERE GROUP BY year 

はそれがあなたのために働いていた場合、私に教えてください。

+0

SELECT名、年、MAX(評価)FROM Films GROUP BY year; <---かなり単純で、私に期待される結果を与える、ありがとう:) – gooornik07

関連する問題