SQL中使用DISTINCT无法去除重复数据的问题求助
问题原因
DISTINCT是对整行字段组合去重,你同时查询了artist和streams,只要这两个字段的组合不重复,就会被保留。BTS的几条记录streams值不同,所以整行是唯一的,自然不会被过滤掉。
解决方案
如果你想每个artist只出现一次,同时获取对应的播放量数据,可以用以下两种方式:
方式1:取每个艺人的最高播放量
用GROUP BY按艺人分组,搭配聚合函数MAX()获取每组的最高播放量,再排序取前5:
SELECT artist, MAX(streams) AS max_streams FROM spotify_daily_charts GROUP BY artist ORDER BY max_streams DESC FETCH FIRST 5 ROWS ONLY;
方式2:用窗口函数指定保留每条艺人的某条记录
如果需要更灵活的筛选逻辑(比如保留艺人播放量最高的那条完整记录),可以用ROW_NUMBER()窗口函数:
SELECT artist, streams FROM ( SELECT artist, streams, -- 按艺人分组,每组内按播放量降序排序,给每条记录标记序号 ROW_NUMBER() OVER (PARTITION BY artist ORDER BY streams DESC) AS rn FROM spotify_daily_charts ) t -- 只保留每组的第一条(播放量最高的那条) WHERE rn = 1 ORDER BY streams DESC FETCH FIRST 5 ROWS ONLY;
内容的提问来源于stack exchange,提问作者Melb Jhay
相关产品推荐
相关产品推荐

