我正在斯坦福在线参加免费的 DB 课程,坦率地说,其中一个练习给我带来了一些麻烦。我有一种感觉,这应该非常简单,所以对于 DBA,我显然不太擅长 SQL。
我们正在使用简化的电影评级方案。
对于同一评论者对同一部电影两次评分并第二次给予更高评分的所有情况,返回评论者的姓名和电影的标题。
这是架构:
Movie ( mID, title, year, director )
Reviewer ( rID, name )
Rating ( rID, mID, stars, ratingDate )
我该怎么办?
您可以根据此类条件自行加入表(至少,我可以在 SQL Server 中执行此操作):
请注意,我们正在将评级归还给自身。这样,我们可以使用 WHERE 子句来查找
rating
日期和星号都大于rating
.您可以在此处查看我在 SQL Fiddle 中构建的完整示例。
如果您想添加评论者对电影进行了这 2 条评论并且不再添加的条件,您可以添加:
这假定该
Rating
表具有(rID, mID, ratingDate)
作为主键。这是使用 SQL Fiddle 中内置的表 Miracle173 的分析解决方案。该分析减轻了查询 Ratings 表的需要
两次三次。http://sqlfiddle.com/#!4/6957e/16
您可以在http://sqlfiddle.com/#!4/6957e/7查看。
它只会考虑一个评论家的电影,他的评分正好是两次
结合先前答案中的部分的解决方案如下: