MySQL多表JOIN查询:如何按stdid统计video表的总videotime时长?
按stdid维度统计视频总时长SQL方案
核心逻辑
四张表按层级关联后聚合统计:
- 关联链路:
table_std←tablesubject←table_chapter←tbvid(视频表) - 统计规则:对视频表
videotime字段求和,最终按stdid分组输出
参考SQL语句
SELECT s.stdid, s.stdname, -- 不需要标准名称可直接删除该行 SUM(v.videotime) AS total_videotime FROM table_std s INNER JOIN tablesubject sub ON s.stdid = sub.stdid INNER JOIN table_chapter c ON sub.subjectid = c.subjectid INNER JOIN tbvid v ON c.chapterid = v.chapterid GROUP BY s.stdid, s.stdname -- 仅按stdid分组可删除s.stdname ORDER BY s.stdid;
适配调整说明
- 若需要保留所有标准表的记录(无对应视频的标准总时长显示为0),将所有
INNER JOIN替换为LEFT JOIN,同时将求和逻辑改为SUM(IFNULL(v.videotime, 0)) - 语句中的关联字段(如
subjectid/chapterid等)如果和实际表结构的字段名不一致,直接替换为你实际的外键字段即可 - 如果你的视频表实际表名为
video,将语句中的tbvid替换为video即可
内容的提问来源于stack exchange,提问作者Nisarg Jani
相关产品推荐
相关产品推荐

