我遇到的问题如下表所示:
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。它也恰好是该工作室最古老的电影,所以我不知道如何处理这个。
最后,钻石应该被退回,因为它是该工作室唯一的电影,没有什么可比较的。
答案 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
)