如何编写SQL查询找出各区域单位销量最高的销售代表?
问题解决:各区域顶级销售代表查询
原问题
给定OrderHistory表结构及数据,忽略日期字段,编写SQL查询找出按单位销量统计的各区域顶级销售代表,预期输出字段:Representative, Region, TotalUnitsSoldByHim
你现有查询的问题
- 表名/字段名错误:原数据集表名为
OrderHistory,你写的是SALES;销售代表字段是Representative而非Rep,销量字段是UnitSales而非Units - 结果缺失关键信息:仅返回区域和最大销量,未关联到对应的销售代表
- 未处理并列情况:如果同区域有多个销售代表总销量并列第一,你的查询无法全部展示
正确解决方案
推荐用窗口函数实现,既简洁又能处理并列顶级的情况:
-- 先计算每个销售代表在所属区域的总销量 WITH RepRegionSales AS ( SELECT Representative, Region, SUM(UnitSales) AS TotalUnitsSoldByHim FROM OrderHistory GROUP BY Region, Representative ), -- 给每个区域内的销售代表按总销量排名 RankedSales AS ( SELECT *, -- RANK()会让并列第一的销售共享第1名,DENSE_RANK()效果类似 RANK() OVER(PARTITION BY Region ORDER BY TotalUnitsSoldByHim DESC) AS SalesRank FROM RepRegionSales ) -- 筛选出各区域排名第1的销售代表 SELECT Representative, Region, TotalUnitsSoldByHim FROM RankedSales WHERE SalesRank = 1;
逻辑说明
RepRegionSales:按区域+销售代表分组,统计每个销售在对应区域的总销量RankedSales:用PARTITION BY Region拆分每个区域,ORDER BY TotalUnitsSoldByHim DESC按总销量降序排名,RANK()保留并列排名- 最后筛选
SalesRank = 1的记录,得到各区域的顶级销售(含并列情况)
执行结果
实际运行后会得到:
- Central区域:Gill(总销量206)
- East区域:Jones(总销量336)
- West区域:Sorvino(总销量142)
内容的提问来源于stack exchange,提问作者Nishant Varma
相关产品推荐
相关产品推荐

