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

如何通过单条MySQL查询获取所有电影的ID、标题、描述及平均评分?

解决电影平均评分查询的SQL问题

先给你指出当前SQL语句存在的两个核心问题:

  • 你用到了聚合函数avg(starCount),但缺少GROUP BY子句——在MySQL严格SQL模式下会直接报错,非严格模式返回的也不是每部电影的单独评分,而是所有投票的整体平均值,完全不符合需求。
  • 用JOIN(内连接)的话,那些还没有收到任何投票的电影会被直接过滤掉,要是你想展示全量电影数据,得换成左连接。

下面给你两种场景的正确写法:

场景1:展示所有电影(含无评分的,无评分时平均分为0)

SELECT 
    m.id,
    m.title,
    m.description,
    IFNULL(AVG(v.starCount), 0) AS avg_rating
FROM movies m
LEFT JOIN votes v ON m.id = v.movieid
GROUP BY m.id, m.title, m.description;

这里的关键细节:

  • LEFT JOIN确保movies表的每一条记录都能保留在结果里,哪怕对应电影没有投票数据
  • IFNULL把无评分电影的NULL平均评分转换成0,结果展示更友好
  • GROUP BY指定按电影的唯一标识及属性分组,保证每一行都是单部电影的独立数据

场景2:只展示有评分记录的电影

如果只关心已经收到投票的电影,用内连接加分组即可:

SELECT 
    m.id,
    m.title,
    m.description,
    AVG(v.starCount) AS avg_rating
FROM movies m
JOIN votes v ON m.id = v.movieid
GROUP BY m.id, m.title, m.description;

额外补充:如果你的movies表中id是主键,在MySQL 5.7及以上版本里,GROUP BY m.id就足够了(主键可唯一确定其他字段),但写上所有非聚合字段的兼容性更强,在不同SQL模式下都不会出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:33:15