[英]expanding sql query for selecting top two rows based on rating criteria?
我正在做一些练习来获得我的sql基础知识。 我被困在这里,无法取得任何进展。 如果我能获得有关如何分解复杂查询的提示,我将非常感激,如下所示:
有三个表:
电影(mID,标题,年份,导演) - 有一部电影的ID号为mID,标题,发行年份和导演。
审稿人(rID,姓名) - ID号为rID的审稿人具有特定名称。
评级(rID,mID,stars,ratingDate) - 评论者rID在某个评级日期给予电影mID一些评级(1-5)的星级。
问题是 :
对于同一评论者对同一部电影进行两次评分并且第二次给予更高评级的所有情况,请返回评论者的姓名和电影的标题。
这是我的尝试:
select distinct temp1.ID FROM (select * FROM
(select rID, name,title twos FROM
(select r.rID , rev.name, m.title, count(*) as twos from reviewer rev
JOIN rating r on r.rID=rev.rID
JOIN movie m on m.mID=r.mID
GROUP BY rev.rID) counts where counts.twos=2) result, rating r
where result.rID=r.rID ORDER BY ratingDate DESC) TEMP temp1
INNER JOIN TEMP temp2
ON temp1.rId = temp2.rId AND temp1.ratingDate > temp2.ratingDate
WHERE temp1.stars > temp2.stars;
我迭代地构建这个查询。 但它没有给出正确的解决方案。 所以我想知道如何解决这类问题。 这不是家庭作业。我在这里做在线教程。
谢谢
在SQL中,它有助于集合思考。 例如,您可以选择存在较低评级的早期评论的评论集:
select Reviewer.name
, Movie.title
from Rating
join Reviewer
on Reviewer.rID = Rating.rID
join Movie
on Movie.mID = Rating.mID
where exists
(
select *
from Rating prev
where prev.mID = Rating.mID
and prev.rID = Rating.rID
and prev.ratingDate < Rating.ratingDate
and prev.stars < Rating.stars
)
这是一个非常好的课程顺便说一句!
首先,您获得具有重复mID
和rID
组合的行。 然后将其JOIN
Rating
,看看给出的第二star
是否高于第star
。 然后JOIN
Movie
和Reviewer
,获取评论者姓名和电影片名。
SELECT
rv.name,
m.title
FROM (
SELECT
rID, mID
FROM Rating
GROUP BY rID, mID
HAVING COUNT(*) = 2
)t
INNER JOIN Rating r
ON r.rID = t.rID
AND r.mID = t.mID
INNER JOIN Rating r2
ON r2.rID = r.rID
AND r2.mID = r.mID
AND r2.ratingDate > r.ratingDate
INNER JOIN Movie m
ON m.mID = r.mID
INNER JOIN Reviewer rv
ON rv.rID = r.rID
WHERE
r2.stars > r.stars
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.