0

我有以下表格:

Movie ( mID, title, year, director ) 

Reviewer ( rID, name ) 

Rating ( rID, mID, stars, ratingDate ) 

我想要做的是得到导演的名字以及他导演并获得最高评价的电影名称。

例如,如果 Steven Spielberg 导演了两部电影(即AB),分别获得 3 星和 5 星评级,则查询必须显示 Steven Spielberg 和 B(评级最高的电影)。

PS:我只需要方法方面的帮助。希望我说清楚了。请询问是否需要更多信息或解释。

4

5 回答 5

0

设置子选择以获得导演和最高评分:-

SELECT director, MAX(stars)
FROM Movie
INNER JOIN Rating
ON Movie.mID = Rating.mID
INNER JOIN
(
    SELECT director, MAX(stars) AS MaxRating
    FROM Movie
    INNER JOIN Rating
    ON Movie.mID = Rating.mID
    GROUP BY director
) Sub1
ON Movie.directort = Sub1.director
AND Rating.stars = Sub1.MaxRating

但是,我认为您将需要更多详细信息。您目前似乎没有使用评论者表,我假设一部电影可能有几个不同的评论者,他们可能会给出不同的评分。如果是这样,您可能希望将上述内容用作子选择来加入评分表(标题和星号上的 macthign),并从该表连接到审阅者表。

于 2013-07-05T10:10:46.587 回答
0

你为什么不试试这个,

SELECT TITLE,DIRECTOR FROM MOVIE,
(SELECT MAX(STARS),mID FROM RATING GROUP BY mID) R
WHERE MOVIE.mID=R.mID
于 2013-07-05T10:11:37.660 回答
0

干得好

SELECT q.* FROM (SELECT m.*,MAX(r.`stars`) AS maxrating FROM `movie` m 
INNER JOIN `rating` r ON (m.`mID` = r.`mID` ) 
GROUP BY r.`mID` ORDER BY maxrating DESC ) q GROUP BY q.director 
ORDER BY q.maxrating DESC 

我相信这个问题是从斯坦福大学提供的 DB 类测验中得到的

这是你的小提琴

于 2013-07-05T12:52:53.387 回答
0

另一种方法是:

select m.title, max(r.stars) as stars
from rating r
inner join movie m on r.mid = m.mid
group by r.mid
order by m.title
于 2014-07-08T18:52:03.363 回答
-1

这段代码就足够了:

select distinct m1.director, m1.title, r1.stars from movie m1
join rating r1 on m1.mID = r1.mID
left join (
    select m2.director, r2.stars from movie m2
    join rating r2 on m2.mID = r2.mID
) s on m1.director = s.director and r1.stars < s.stars
where s.stars is null and m1.director is not null;
于 2013-07-05T10:18:21.847 回答