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

如何用SQL计算多首歌曲平均评分总和得到艺人总评分

SQL实现逻辑及正确写法

实现思路

  • 先按songID对ratings表分组,计算出每首歌曲的平均评分
  • 将歌曲平均评分的结果和songs表关联,拿到每首歌对应的艺人
  • 最后按artist分组,对该艺人所有歌曲的平均评分求和,得到艺人总评分

通用SQL写法(兼容所有主流数据库)

SELECT
    s.artist,
    SUM(song_avg.rating_avg) AS artist_total_score
FROM (
    -- 内层查询:计算每首歌的平均评分
    SELECT
        songID,
        AVG(rating) AS rating_avg
    FROM ratings
    GROUP BY songID
) AS song_avg
INNER JOIN songs s ON song_avg.songID = s.songID
GROUP BY s.artist;

进阶写法(支持CTE的数据库可用,可读性更高)

如果使用的是MySQL 8.0+、PostgreSQL、SQL Server等支持公用表表达式的数据库,可以用更清晰的CTE写法:

WITH song_avg_rating AS (
    SELECT
        songID,
        AVG(rating) AS rating_avg
    FROM ratings
    GROUP BY songID
)
SELECT
    s.artist,
    SUM(sar.rating_avg) AS artist_total_score
FROM song_avg_rating sar
INNER JOIN songs s ON sar.songID = s.songID
GROUP BY s.artist;

原有写法问题说明

你之前的写法存在两个核心问题:

  1. 硬编码指定songID,无法适配全量数据的计算需求
  2. 不支持直接嵌套聚合函数SUM(AVG()),必须通过两次分组分步计算才能实现需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:48:02