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

SQL Server 2014:获取分组统计后的最小计数结果

解决方案

针对UserGame表中GameType=2的数据,我们需要按GameId分组,找出每个GameId下计数最少的Number值;若多个Number计数相同,则返回对应IID最小的那个。

你的原查询存在两个核心问题:

  • 第一个CTE的GROUP BY包含了IID,导致每个IID单独成组,无法正确统计每个Number的总计数
  • 排名函数的排序逻辑错误,未遵循「计数升序+最小IID升序」的筛选规则

以下是修正后的查询语句:

WITH NumberCounts AS (
    -- 统计每个GameId下每个Number的总出现次数,同时记录该Number对应的最小IID
    SELECT 
        GameId,
        Number,
        COUNT(*) AS TotalNo,
        MIN(IID) AS MinIID
    FROM UserGame
    WHERE GameType = 2
    GROUP BY GameId, Number
),
RankedNumbers AS (
    -- 对每个GameId内的Number,按计数升序、最小IID升序排名
    SELECT 
        GameId,
        Number,
        TotalNo,
        ROW_NUMBER() OVER (
            PARTITION BY GameId 
            ORDER BY TotalNo ASC, MinIID ASC
        ) AS RowRank
    FROM NumberCounts
)
-- 筛选每个GameId中排名第一的记录
SELECT GameId, Number, TotalNo
FROM RankedNumbers
WHERE RowRank = 1;

逻辑说明:

  • NumberCounts:按GameId和Number分组,统计每个Number的总出现次数TotalNo,同时用MIN(IID)获取该Number对应的最小IID,为同分情况的筛选做准备。
  • RankedNumbers:使用ROW_NUMBER()函数,在每个GameId分组内,先按TotalNo从小到大排序(优先选计数最少的),再按MinIID从小到大排序(计数相同时选IID最小的),排名为1的就是目标记录。
  • 最后通过RowRank=1筛选出每个GameId符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:13