如何统计每个用户评分的电影数量?(附表结构及尝试SQL)
正确统计每个用户评分电影数量的SQL实现
涉及数据表结构
- movie_table:包含字段
id(主键)、name、year,存储电影基础信息 - movierating_table:包含字段
userid、movieid(外键关联movie_table.id)、rating,存储用户对电影的评分记录
原SQL的问题
你写的SQL存在语法错误(多余的id、WHERE子句写法不符合规范),而且缺少分组逻辑,没法实现“每个用户评分电影数量”的统计需求。
正确实现方案
方案1:直接基于评分表统计(推荐,外键已保证movieid有效)
SELECT userid, COUNT(movieid) AS rated_movie_count FROM movierating_table GROUP BY userid;
方案2:关联电影表统计(适用于外键约束不严格的场景)
如果需要确保统计的是真实存在的电影记录,可以关联movie_table:
SELECT mr.userid, COUNT(mt.name) AS rated_movie_count FROM movierating_table mr INNER JOIN movie_table mt ON mr.movieid = mt.id GROUP BY mr.userid;
过滤特定用户的统计
如果只需要统计指定用户(比如1500、2000)的评分数量,添加WHERE子句即可:
SELECT userid, COUNT(movieid) AS rated_movie_count FROM movierating_table WHERE userid IN (1500, 2000) GROUP BY userid;
关键说明
GROUP BY userid是实现按用户分组统计的核心,它会将相同userid的记录归为一组,COUNT函数计算每组内的电影评分数量COUNT(movieid)、COUNT(mt.name)或COUNT(*)都可以完成统计,使用具体字段更能明确统计的对象(需确保字段不为空)
内容的提问来源于stack exchange,提问作者vishnu k
相关产品推荐
相关产品推荐

