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

如何用MySQL计算每位艺术家每次练习会话的平均练习歌曲数

解决思路与SQL实现

我懂你要的需求——就是算出每位艺术家每次练习会话平均练了多少首歌对吧?你之前遇到的AVG()嵌套COUNT()报错的问题,核心原因是SQL里聚合函数不能直接嵌套使用,得拆成分两步来处理:

第一步:先统计单次练习的歌曲数

首先我们需要按「艺术家+练习会话」分组,算出每一次练习里实际包含的歌曲数量。这里要注意如果同一个练习里同一首歌可能被重复记录的话,记得用COUNT(DISTINCT Song_ID)去重,否则直接用COUNT(Song_ID)就行。

第二步:计算平均练习歌曲数

基于第一步的结果,再按艺术家分组,用AVG()计算这些单次练习歌曲数的平均值,就是你要的最终结果。

完整SQL代码

SELECT 
    Artist_ID,
    ROUND(AVG(songs_per_practice), 2) AS avg_songs_per_practice -- 用ROUND保留两位小数更直观
FROM (
    -- 子查询:生成每个艺术家每次练习的歌曲数量列表
    SELECT 
        Artist_ID,
        Practice_ID,
        COUNT(Song_ID) AS songs_per_practice
        -- 如果有重复记录,替换成 COUNT(DISTINCT Song_ID)
    FROM Songs_Practices
    -- 如果你要限定时间(比如今年),可以加WHERE条件:
    -- WHERE YEAR(关联的练习日期字段) = YEAR(CURRENT_DATE)
    GROUP BY Artist_ID, Practice_ID
) AS practice_summary
GROUP BY Artist_ID;

为什么之前的写法会报错?

你尝试的AVG(COUNT(Song_ID))属于聚合函数嵌套,SQL引擎无法直接处理这种逻辑——因为COUNT()是对分组后的结果做统计,而AVG()需要的是一组数值,必须先通过子查询把内层聚合的结果先计算出来,变成一个可被外层聚合的数据集,才能正常计算平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:41:50