gpt4 book ai didi

sql - 扩展 sql 查询以根据评级标准选择前两行?

转载 作者:行者123 更新时间:2023-12-03 18:35:14 25 4
gpt4 key购买 nike

我正在做一些练习来提高我的 sql 基础知识。我被困在这里,无法进一步取得任何进展。如果我能获得有关如何分解复杂查询的提示,我将不胜感激,例如:

共有三个表:

电影(mID、片名、年份、导演)——
有一部电影的 ID 号为 mID、片名、发行年份和导演。

Reviewer ( rID, name ) -- ID号为rID的reviewer有一个特定的名字。

Rating ( rID, mID, stars, ratingDate ) -- 评论者 rID 在某个 ratingDate 给电影 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;

我迭代地构建这个查询。但它没有给出正确的解决方案。所以我想知道如何解决这类问题。
这不是家庭作业。我正在做 here 的在线教程.

谢谢

最佳答案

在 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
)

顺便说一句,这是一门非常好的类(class)!

关于sql - 扩展 sql 查询以根据评级标准选择前两行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28186045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com