我有三张桌子,分别是movieratingreviewer

movie有4列movieIDtitleyeardirector

rating有4列reviewerIDmovieIDstarsratingDate

reviewer有两列reviewerIDname

我该如何查询reviewer名对同一部电影的评分超过1次,并在第二次审查中给予更高评分的人.

这是我在查询中try 在两列中查找具有重复值的行(这意味着该电影已被一名 comments 者多次评分),然后不知何故,我需要查询reviewer名在第二次评议中给出更高stars分的人.

SELECT reviewer.name, movie.title, rating.stars, rating.ratingDate
FROM rating
INNER JOIN reviewer ON reviewer.rID = rating.rID
INNER JOIN movie ON movie.mID = rating.mID
WHERE rating.rID IN (SELECT rating.rID FROM rating GROUP BY rating.rID, rating.mID HAVING COUNT(*) > 1)
ORDER BY reviewer.name, rating.ratingDate;

movie

movieID Title Year Director
101 Gone with the Wind 1939 Victor Fleming
102 Star Wars 1977 George Lucas
103 The Sound of Music 1965 Robert Wise
104 E.T. 1982 Steven Spielberg
105 Titanic 1997 James Cameron
106 Snow White 1937 null
107 Avatar 2009 James Cameron
108 Raiders of the Lost Ark 1981 Steven Spielberg

rating

reviewerID movie ID Stars ratingDate
201 101 2 2011-01-22
201 101 4 2011-01-27
202 106 4 null
203 103 2 2011-01-20
203 108 4 2011-01-12
203 108 2 2011-01-30
204 101 3 2011-01-09
205 103 3 2011-01-27
205 104 2 2011-01-22
205 108 4 null
206 107 3 2011-01-15
206 106 5 2011-01-19
207 107 5 2011-01-20
208 104 3 2011-01-02

reviewer

reviewerID Name
201 Sarah Martinez
202 Daniel Lewis
203 Brittany Harris
204 Mike Anderson
205 Chris Jackson
206 Elizabeth Thomas
207 James Cameron
208 Ashley White

预期结果

Reviewer Title
Sarah Martinez Gone with the Wind

编辑:我使用的是MySQL版本8.0.29

推荐答案

使用:

select re.Name,mo.Title
FROM (
      select reviewerID,movieID,ratingDate,Stars
      from rating r 
      where exists (select 1 
              from rating r1 
              where r1.reviewerID=r.reviewerID 
              and r.movieID=r1.movieID 
              and r.ratingDate>r1.ratingDate
              and r.Stars>r1.Stars
       )) as t1
inner join movie mo on t1.movieID=mo.movieID
inner join reviewer re on t1.reviewerID=re.reviewerID

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0c5d850ee3393b054d9af4c4ac241d96

关键部分是EXISTS条声明

where exists (select 1 
              from rating r1 
              where r1.reviewerID=r.reviewerID 
              and r.movieID=r1.movieID 
              and r.ratingDate>r1.ratingDate
              and r.Stars>r1.Stars 

它只会返回同一用户有多部电影的结果,根据评级日期,评级星比previos的要大

Mysql相关问答推荐

无法从容器从APS. NET应用程序连接到MySQL服务器容器

MySQL生成的整型计算可以为空吗?

获取最大登录应用程序用户数以及何时

Mysql - 按周分组但从 1 开始计数

数据导入和默认目标架构空列表. (Mysql 工作台 8)

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

MySQL,递归 CTE.它如何以这种句法形式工作?

MySQL Procedure 变量在 count(*) 上接收 null

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

有人可以帮我用 R 编程解决这个问题吗?

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

MySQL如何在小时和分钟之间 Select 时间

在 postgresql 中实现 UML 类:创建类型与创建表

如何过滤表格,以便它显示最新的数据?

MySQL 5.6 DATETIME 不接受毫秒/微秒

MySQL Workbench 无法加载 mysql.proc

如何从两个不同的日期获得年份差异?

加快 mysql 转储和导入

什么是mysql的BETWEEN性能超过..?

在 PHP 中运行 MySQL *.sql 文件