如何使用count函数跨表统计数据为genre_stats表新增统计列
解决方案
步骤1:新增统计列
首先给genre_stats表添加用于存储出现次数的字段,示例字段名为movie_contain_count,类型设置为整数即可:
ALTER TABLE genre_stats ADD COLUMN movie_contain_count INT DEFAULT 0;
步骤2:统计并更新字段值
核心逻辑是通过FIND_IN_SET(MySQL环境下)匹配流派是否出现在电影的多流派拼接字符串中,再用COUNT计数后更新:
UPDATE genre_stats gs SET gs.movie_contain_count = ( SELECT COUNT(*) FROM movies m WHERE FIND_IN_SET(gs.genre, m.genre) > 0 );
如果使用PostgreSQL等没有FIND_IN_SET函数的数据库,可以替换为兼容的字符串匹配逻辑:
UPDATE genre_stats gs SET movie_contain_count = ( SELECT COUNT(*) FROM movies m WHERE (m.genre = gs.genre) OR (m.genre LIKE CONCAT(gs.genre, ',%')) OR (m.genre LIKE CONCAT('%,', gs.genre)) OR (m.genre LIKE CONCAT('%,', gs.genre, ',%')) );
验证建议
执行更新前可以先运行查询语句验证计数结果是否符合预期,避免误操作:
SELECT gs.genre, COUNT(*) AS count_check FROM genre_stats gs LEFT JOIN movies m ON FIND_IN_SET(gs.genre, m.genre) > 0 GROUP BY gs.genre;
注:以上逻辑统计的是包含对应流派的电影数量,如果需要统计流派的总出现次数(即单部电影有多个流派时每个流派各计数1次),需要先把movies表的genre字段拆分为单流派单行的结构再关联统计。
内容的提问来源于stack exchange,提问作者Ghandy kozman
相关产品推荐
相关产品推荐

