You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL子查询求助:筛选同一评论者对同影片二次评分更高的记录

问题分析与SQL实现

原语句错误原因

你编写的SQL使用了MAX()聚合函数但未添加GROUP BY子句,数据库会默认将所有查询结果聚合为单行,仅返回全局最高评分对应的1条电影记录,因此仅得到1部电影的结果。


需求1:查询所有电影对应的最高评分

实现语句

SELECT m.title, COALESCE(MAX(r.stars), 0) AS max_score
FROM Movie m
LEFT JOIN Rating r ON m.mID = r.mID
GROUP BY m.mID, m.title;

说明

  • 采用LEFT JOIN关联两张表,保证没有评分记录的电影也能正常返回
  • COALESCE函数用于处理无评分电影的默认值,可根据需求调整为NULL或其他数值
  • 按电影ID、电影标题分组后,会在每个电影分组内计算最高评分,最终返回所有电影的结果

需求2:筛选同一评论者对同一部电影第二次评分高于第一次的场景

实现语句

SELECT DISTINCT rev.name, m.title
FROM Rating r1
INNER JOIN Rating r2
  ON r1.rID = r2.rID
  AND r1.mID = r2.mID
  AND r1.ratingDate < r2.ratingDate
  AND r1.stars < r2.stars
INNER JOIN Movie m ON r1.mID = m.mID
INNER JOIN Reviewer rev ON r1.rID = rev.rID;

说明

  • 通过Rating表自连接匹配同一评论者、同一部电影的两次评分记录,筛选出时间靠后的评分更高的记录对
  • 关联Movie表、Reviewer表分别获取电影标题和评论者姓名
  • 增加DISTINCT去重,避免同一评论者同一部电影存在多组符合要求的评分对时返回重复结果

内容的提问来源于stack exchange,提问作者rachel_green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:27:04