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

如何在SQL中按分类分组计算各品牌的排名?

按Category分组计算Brand的排名问题

给定table1表数据如下:

Category  Brand  Value     
A           A1     4
B           B1     7
C           C1     8
A           A2     3
B           B2     4
C           C2     6
A           A3     9
B           B3     10
C           C3     1
A           A4     5

需求是按Category分组,每组内根据Value降序为Brand计算排名,期望输出:

Category      Brand Value     Rank
A               A3    9         1
A               A4    5         2
A               A1    4         3
A               A2    3         4
B               B3    10        1
B               B1    7         2
B               B2    4         3
C               C1    8         1
C               C2    6         2
C               C3    1         3

你之前尝试的SQL写法有误,GROUP BY是用于聚合数据的操作,无法实现组内逐行排名的需求,正确的方式是使用窗口函数:

SELECT 
    Category,
    Brand,
    Value,
    RANK() OVER (PARTITION BY Category ORDER BY Value DESC) AS Rank
FROM table1
ORDER BY Category, Rank;

关键说明:

  • PARTITION BY Category:指定按Category字段分组,每个Category单独计算排名
  • ORDER BY Value DESC:定义组内排序规则,按Value从高到低排序,排名1对应组内最大的Value
  • 若需要连续排名(即使存在相同Value也不跳过名次),可替换RANK()为DENSE_RANK();若需要每行唯一排名(忽略Value重复),则用ROW_NUMBER()

执行上述SQL即可得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:33:37