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

T-SQL如何获取前三大计数值并包含所有对应并列重复记录

你需要使用DENSE_RANK()窗口函数实现按档位筛选的需求,该函数会为相同的计数值分配相同的排名,且排名不会跳号,完全匹配你所说的“档”的定义。

实现代码

WITH PlanStats AS (
    SELECT 
        b.planID, 
        COUNT(b.planID) AS PopularPlan,
        DENSE_RANK() OVER(ORDER BY COUNT(b.planID) DESC) AS PlanRank
    FROM dbo.Subscriber AS b
    GROUP BY b.planID
)
SELECT planID, PopularPlan
FROM PlanStats
WHERE PlanRank <= 3
ORDER BY PopularPlan DESC;

原方案问题说明

你之前使用TOP 3 WITH TIES没有达到预期,是因为TOP N WITH TIES的逻辑是:先取排序后的前N行,再返回所有和第N行排序字段值相同的行。你的示例中排序后的第3行计数值为2390,所以只会返回所有计数值等于2390及更高的记录,自然不会包含第三档的2090。

用DENSE_RANK生成的排名中,你的示例数据对应排名为:

  • 2555对应排名1
  • 2390对应排名2
  • 2090对应排名3
  • 2080对应排名4

筛选PlanRank <=3就可以自动覆盖前3个档位的所有并列记录,完全符合你的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:06:07