如何将MySQL聚合函数结果作为其他表的字段值?
解决方案:关联查询与更新书籍平均评分
一、查询包含书籍标题与平均评分的结果
用LEFT JOIN将books表和你已写好的平均评分子查询关联,能保留所有书籍(包括无评分的)并展示对应平均评分:
SELECT b.id_book, b.title, br_avg.avg_rating FROM books b LEFT JOIN ( SELECT id_book, AVG(rating) AS avg_rating FROM books_ratings GROUP BY id_book ) br_avg ON b.id_book = br_avg.id_book;
用LEFT JOIN而非INNER JOIN的原因是:确保还没有任何评分的书籍也会出现在结果中,它们的avg_rating会显示为NULL,匹配你当前books表的初始状态。
二、更新books表的avg_rating字段
如果需要把计算出的平均评分直接写入books表的avg_rating字段,使用MySQL的UPDATE JOIN语法即可:
UPDATE books b LEFT JOIN ( SELECT id_book, AVG(rating) AS avg_rating FROM books_ratings GROUP BY id_book ) br_avg ON b.id_book = br_avg.id_book SET b.avg_rating = br_avg.avg_rating;
该语句会将每本书对应的平均评分更新到books表的avg_rating字段,无评分的书籍会保持NULL值不变。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

