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

SQL Server 2012:如何筛选各国家年龄计数最大值的记录

解决SQL Server 2012中筛选每个国家年龄计数最大记录的问题

你可以通过窗口函数实现需求,以下是两种可行方案:

方案1:仅保留每个国家计数最大的单条记录(适用无并列最大的场景)

使用ROW_NUMBER()为每个国家内的记录按计数降序排名,筛选排名第一的记录:

SELECT country, age, countOfAge
FROM (
    SELECT 
        country, 
        age, 
        COUNT(age) AS countOfAge,
        -- 按国家分区,按计数降序生成排名
        ROW_NUMBER() OVER (PARTITION BY country ORDER BY COUNT(age) DESC) AS rn
    FROM MOCK
    GROUP BY country, age
) X
WHERE rn = 1;

方案2:保留每个国家所有计数并列最大的记录(适用有并列最大的场景)

如果同一个国家存在多个年龄的计数并列最高,使用RANK()可以保留所有并列记录:

SELECT country, age, countOfAge
FROM (
    SELECT 
        country, 
        age, 
        COUNT(age) AS countOfAge,
        -- 并列记录会获得相同排名
        RANK() OVER (PARTITION BY country ORDER BY COUNT(age) DESC) AS rn
    FROM MOCK
    GROUP BY country, age
) X
WHERE rn = 1;

核心逻辑说明

  • PARTITION BY country:将数据按国家分组,每个国家独立计算排名
  • ORDER BY COUNT(age) DESC:确保计数最大的记录排在最前面
  • 外层查询通过rn = 1筛选出每个国家的最高计数记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:05:17