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

SQL中DISTINCT失效问题:为何查询仍出现重复game_id?

解决DISTINCT后仍出现重复game_id的问题

嘿,我来帮你搞定这个问题!你遇到的情况其实很常见——DISTINCT并不是只针对game_id去重,它是对整行的所有字段组合进行去重判断的。也就是说,只要game_id相同但spike或者tweets_per_minute不一样,DISTINCT就会把它们当成不同的行保留下来,这就是为什么你还能看到重复的game_id。

下面给你两种针对性的解决方案,根据你的需求选就行:

方案1:用GROUP BY聚合同一game_id的记录

如果你希望每个game_id只出现一次,并且需要对spike和tweets_per_minute做聚合处理(比如取最大值、平均值),可以用GROUP BY:

SELECT 
    game_id,
    MAX(spike) AS spike, -- 这里用MAX/AVG/MIN取决于你想保留哪个值
    MAX(_c0) AS tweets_per_minute
FROM virtual4
GROUP BY game_id
ORDER BY tweets_per_minute DESC
LIMIT 10;

这个语句会把所有相同game_id的行合并,并用聚合函数(比如MAX)提取你需要的spike和推文数值,确保每个game_id唯一。

方案2:用窗口函数筛选每个game_id的目标行

如果你想保留spike和tweets_per_minute的原始值,但每个game_id只留一条(比如对应最高推文数的那一行),可以用窗口函数ROW_NUMBER():

SELECT game_id, spike, tweets_per_minute
FROM (
    SELECT 
        game_id,
        spike,
        _c0 AS tweets_per_minute,
        -- 给每个game_id的行按推文数降序排名
        ROW_NUMBER() OVER (PARTITION BY game_id ORDER BY _c0 DESC) AS row_rank
    FROM virtual4
) AS ranked_data
WHERE row_rank = 1 -- 只取每个game_id排名第一的行
ORDER BY tweets_per_minute DESC
LIMIT 10;

这个方法会先给每个game_id的所有行排序,然后只保留排名第一的那一行,既保证了game_id唯一,又能保留对应最高推文数的原始字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:22