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

多表Count与Group by操作问题:如何正确查询符合条件的高评分电影

错误原因分析

你碰到的报错是因为SQL的分组规则要求:SELECT语句中所有未被聚合函数(比如SUM、COUNT)包裹的列,必须全部出现在GROUP BY子句中。你之前的查询里GROUP BY只写了title,但SELECT里包含movieid,数据库无法确定如何将movieid与分组后的结果对应,因此报错。

另外你的SQL没有满足“评分次数大于200”的需求,TOP(200)是取前200条数据,不是筛选评分次数超过200的电影。

正确的查询语句

方式一:直接关联表查询(推荐)

SELECT 
    m.movieid, 
    m.title, 
    COUNT(r.rating) AS rating_count,
    AVG(r.rating) AS average_rating
FROM movies m
INNER JOIN ratings r ON m.movieid = r.movieid
GROUP BY m.movieid, m.title
HAVING COUNT(r.rating) > 200
ORDER BY average_rating DESC;
  • 用INNER JOIN关联两张表,替代旧的逗号关联写法,逻辑更清晰;
  • COUNT(r.rating)统计每部电影的评分次数;
  • AVG(r.rating)计算每部电影的平均评分(匹配“高评分”的需求);
  • GROUP BY m.movieid, m.title确保所有非聚合列都在分组条件中;
  • HAVING子句过滤评分次数大于200的分组;
  • ORDER BY average_rating DESC按平均评分降序排列结果。

方式二:基于视图的查询

如果一定要用你创建的视图vtopmovie,修改后的查询如下:

SELECT 
    movieid, 
    title, 
    COUNT(rating) AS rating_count,
    AVG(rating) AS average_rating
FROM vtopmovie
GROUP BY movieid, title
HAVING COUNT(rating) > 200
ORDER BY average_rating DESC;

这里必须把movieid和title都加入GROUP BY,同时用HAVING筛选评分次数条件,最后按评分降序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:55:30