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

多表关联场景下使用SQL SUM函数统计歌手音乐总时长问题求助

问题排查与可行SQL方案

原代码错误点

  • 聚合函数语法错误:SUM(Music Duration)(*)写法完全不符合SQL规范,带空格的字段名需要用反引号包裹,求和直接写SUM(c.Music Duration)即可
  • 分组逻辑错误:需求是按艺术家统计总时长,GROUP BY 字段错误选了音乐时长,且加了多余的表别名前缀c.
  • 关联写法不规范:隐式逗号连接容易漏写关联条件,推荐用显式JOIN语法可读性更高
  • 缺艺术家维度字段:SELECT 子句没有返回艺术家标识/名称,统计结果无法对应到具体艺术家

可行解决方案

方案1:直接查询统计每位艺术家的音乐总时长

SELECT 
    p.ID AS 艺术家ID,
    p.`Artist Name` AS 艺术家名称, -- 请替换为你表中实际的艺术家名字段名
    SUM(c.`Music Duration`) AS 音乐总时长
FROM 
    tbl_artist_list p
INNER JOIN 
    tbl_single_query p_c ON p.ID = p_c.Artist_ID
INNER JOIN 
    tbl_music_list c ON c.ID = p_c.Music_ID
GROUP BY 
    p.ID, p.`Artist Name` -- 非聚合字段都要放在GROUP BY中,兼容SQL_MODE严格模式

如果你的phpMyAdmin环境的数据库是MySQL 5.7+,需要确保GROUP BY后面包含所有SELECT里的非聚合字段,避免严格模式报错。

方案2:直接生成新的统计表

如果需要把结果持久化为新表,用以下语句,新表名可自行修改:

CREATE TABLE tbl_artist_music_total_duration 
SELECT 
    p.ID AS 艺术家ID,
    p.`Artist Name` AS 艺术家名称,
    SUM(c.`Music Duration`) AS 音乐总时长
FROM 
    tbl_artist_list p
INNER JOIN 
    tbl_single_query p_c ON p.ID = p_c.Artist_ID
INNER JOIN 
    tbl_music_list c ON c.ID = p_c.Music_ID
GROUP BY 
    p.ID, p.`Artist Name`;

注意:如果你的艺术家表中姓名字段不是Artist Name,请替换为实际的字段名称即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:05