斯坦福 SQL 问题自定进度课程:
对于所有评论者对,例如两位评论者都对同一部电影进行评分,请返回两位评论者的姓名。消除重复,不要将审阅者与自己配对,并且每对仅包含一次。对于每一对,按字母顺序返回该对中的名称。
架构:
Movie ( mID, title, year, director )
Run Code Online (Sandbox Code Playgroud)
有一部电影,ID 号为 mID、片名、上映年份和导演。
Reviewer ( rID, name )
Run Code Online (Sandbox Code Playgroud)
ID号为rID的审稿人有一定的姓名。
Rating ( rID, mID, stars, ratingDate )
Run Code Online (Sandbox Code Playgroud)
评论者 rID 在某个 ratingDate 为电影 mID 给出了多个星级评分 (1-5)。
我的尝试:
Select R.Name, R2.Name
From Reviewer R
Join Reviewer R2 on (R.rID = R2.rID)
Join Rating Rt on (Rt.rID = R2.rID)
Join Rating Rt2 on (Rt2.rID = R.rID)
Where Rt.MID = Rt2.mID and R.rID < r2.rID
Run Code Online (Sandbox Code Playgroud)
我知道我需要一个包含 2 个审阅者姓名列和 2 个电影列的表。我应用了条件,以便电影必须彼此相等,并且 ID 不能与问题相同的条件是“不要将评论者与自己配对,并且每对仅包含一次”。
我的结果是空的(不正确)。我究竟做错了什么?
我将从评级的自加入开始,然后输入名称:
select distinct rv1.name, rv2.name
from rating r1 join
rating r2
on r1.mid = r2.mid join
reviewer rv1
on rv1.rid = r1.rid join
reviewer rv2
on rv2.rid = r2.rid and rv1.name < rv2.name;
Run Code Online (Sandbox Code Playgroud)
您的查询实际上非常相似。我认为主要问题是按select distinct名称排序而不是按名称排序id。
| 归档时间: |
|
| 查看次数: |
2973 次 |
| 最近记录: |