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

SQL TOP3查询去重问题:需剔除重复分数引发的多余结果

问题解决:SQL严格取每组前3条数据(避免分数重复时多返回)

你的原查询问题出在用分数值匹配筛选:当第三、第四名分数相同时,IN (SELECT TOP 3 t1.Score...)会把所有等于第三名分数的行都选出来,导致返回超过3条数据。加DISTINCT在TOP 3前也没用,因为DISTINCT只是去重分数值,还是会匹配所有对应分数的行。

换用**窗口函数ROW_NUMBER()**可以解决这个问题,它会给每个分组内的行分配唯一序号,严格控制返回行数:

SELECT Stamboomnr, Score, Trail, Time, Place, Quali, Division, StockKlasID
FROM (
    SELECT 
        t.Stamboomnr, 
        t.Score, 
        t.Trail, 
        t.Time, 
        t.Place, 
        t.Quali, 
        t.Division, 
        t.StockKlasID,
        -- 按Stamboomnr分组,分数降序排序,生成唯一序号
        ROW_NUMBER() OVER(PARTITION BY t.Stamboomnr ORDER BY t.Score DESC) AS rn
    FROM Tbl09_Stock AS t
) AS ranked
-- 只取每组前3条
WHERE rn <= 3
ORDER BY Stamboomnr, Score DESC;

补充说明:

  • PARTITION BY t.Stamboomnr:按Stamboomnr字段分组,确保每个编号单独计算排名
  • ROW_NUMBER():即使分数相同,也会给行分配唯一的序号(比如同分数的行序号为1、2、3、4...),这样筛选rn <=3就能严格返回每组前3条数据
  • 如果你需要保留所有并列第三名的行(比如分数相同的都算前3),可以把ROW_NUMBER()换成RANK(),但根据你的需求,ROW_NUMBER()更符合"只需要前三条"的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:21