使用SQL查询获取2009年1月播放时长TOP10歌曲的问题咨询
你的现有实现思路存在几个问题,调整后才能满足需求:
- 缺失
GROUP BY分组逻辑:你在ORDER BY里用了聚合函数SUM(),但没有按照歌曲维度分组,SQL会直接报错,无法正确计算每首歌曲的总播放时长。 - LEFT JOIN逻辑无效:你使用了
LEFT JOIN关联两张表,但WHERE子句筛选了client表的date字段,会直接过滤掉所有没有播放记录的歌曲,实际等价于INNER JOIN。 - 缺少返回前10条的限制:没有加
LIMIT 10,最终会返回所有符合时间条件的歌曲,而非排名前10的结果。
修正后的查询语句参考:
SELECT m.song_name, SUM(c.playing_hrs) AS total_playing_hrs FROM music m INNER JOIN client c ON m.id = c.music_id WHERE c.date BETWEEN '2009-01-01' AND '2009-01-31' GROUP BY m.id, m.song_name ORDER BY total_playing_hrs DESC LIMIT 10;
补充说明:如果存在同名歌曲的情况,按照
music.id分组可以避免同名字段被错误合并统计,结果更准确。
内容的提问来源于stack exchange,提问作者user10649856
相关产品推荐
相关产品推荐

