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

如何修改SQL内连接查询以显示包含并列的前3周高分

修改SQL语句以包含并列的前3名高分数据

原SQL语句用TOP(3)只能返回前3条记录,没法处理分数并列的情况(比如示例里Bill和Ben同是123分,都该算作前3名)。要实现包含并列的前3名展示,我们可以用DENSE_RANK()窗口函数给每个用户的总分排名,再筛选排名≤3的记录:

WITH RankedScores AS (
    SELECT 
        tblAccounts.accountID, 
        tblAccounts.contactName, 
        SUM(MONMWins.Points) AS ttlPoints,
        DENSE_RANK() OVER(ORDER BY SUM(MONMWins.Points) DESC) AS scoreRank
    FROM MONMWins
    INNER JOIN tblAccounts
        ON MONMWins.accountID = tblAccounts.accountID
    WHERE MONMWins.dateAdded > DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6)
    GROUP BY tblAccounts.accountID, tblAccounts.contactName
)
SELECT accountID, contactName, ttlPoints
FROM RankedScores
WHERE scoreRank <= 3
ORDER BY ttlPoints DESC, contactName;

说明:

  • DENSE_RANK()会给相同总分的用户分配相同排名,且排名连续(比如1、2、2、3),不会因并列跳过排名
  • 先用CTE计算每个用户的总分和排名,再筛选排名≤3的记录,就能保留所有并列的前3名
  • 保留了原语句中筛选上周数据、按总分降序+姓名排序的逻辑

执行后就能得到和示例一致的结果:所有总分排在前3位(含并列)的用户都会被展示出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:33:15