查找同一工作室发布的所有电影

时间:2015-10-19 10:13:25

标签: sql

我遇到的问题如下表所示:

Movie             Studio    Year    Rating
The Shining       Warner    1999     8.4
The Pianist       Warner    2002     8.6
The LOTR        Dreamworks  2004     8.7
License to Kill Dreamworks  2001     8.3
Complicated         HP      2005     7.7
Django Unchained    HP      2003     8.8
Diamonds        John Lewis  1997     6.7

如何找到评分高于之前发布的所有电影 同一部电影制片厂的电影?

所以输出,我想,应该是:钢琴家,因为它比其他电影发行晚,由同一个工作室,并具有更高的评级。 LOTR的原因与上述相同。

Django Unchained因为虽然后来发布了Complicated,但它的评级低于Complcated。它也恰好是该工作室最古老的电影,所以我不知道如何处理这个。

最后,钻石应该被退回,因为它是该工作室唯一的电影,没有什么可比较的。

3 个答案:

答案 0 :(得分:2)

select * from movietable t1
where not exists (select 1 from movietable t2
                  where t2.studio = t1.studio
                    and t2.rating > t1.rating
                    and t2.year < t1.year)

如果相同的工作室没有更高评级的旧电影,则会返回电影。那是你要的吗?

答案 1 :(得分:0)

此解决方案适用于支持窗口函数的RDBMS。

WITH cte AS
(
   SELECT *, rn = RANK() OVER (PARTITION BY Studio ORDER BY Rating DESC)
   FROM #mytable
)
SELECT *
FROM cte
WHERE rn = 1

LiveDemo

答案 2 :(得分:0)

原始陈述:

select * from movietable where not exists (select 1 from movietable t2 where
movietable.studio = t2.studio and movietable.year < t2.year)

关于django应该提出的第二个声明:

select * from movietable where not exists (select 1 from movietable t2 where
movietable.studio = t2.studio and movietable.year < t2.year
and movietable.rating <= t2.rating
)