SQL分组查询:如何按季度获取最佳销售人员及对应销售额?
按季度获取最高销售额销售人员的SQL解决方案
原SQL报错原因:GROUP BY子句仅指定了Quarter,但SELECT中包含非聚合列Salesperson,数据库无法确定该列应取哪个值(同一季度可能对应多个销售人员),因此触发语法错误。以下是两种可行的实现方案:
方案一:使用窗口函数(推荐)
利用ROW_NUMBER()(或RANK()/DENSE_RANK())按季度分区并按销售额降序排名,筛选出每个季度排名第一的记录:
WITH t1 AS ( -- 此处替换为你生成t1的原始WITH子句逻辑 -- 示例:SELECT Salesperson, Quarter, SUM(SaleAmount) AS Sales FROM SalesRecords GROUP BY Salesperson, Quarter ) SELECT Quarter, Sales, Salesperson FROM ( SELECT Quarter, Sales, Salesperson, -- 按季度分区,销售额降序排序,生成排名 ROW_NUMBER() OVER (PARTITION BY Quarter ORDER BY Sales DESC) AS rank_num FROM t1 ) ranked_t1 WHERE rank_num = 1;
- 若存在多名销售人员同季度销售额并列最高的场景,可将
ROW_NUMBER()替换为RANK()或DENSE_RANK(),这样会返回所有并列最高的记录。
方案二:关联子查询
通过子查询获取每个季度的最高销售额,再关联原表匹配对应销售人员:
WITH t1 AS ( -- 此处替换为你生成t1的原始WITH子句逻辑 ) SELECT t.Quarter, t.Sales, t.Salesperson FROM t1 t WHERE t.Sales = ( SELECT MAX(Sales) FROM t1 WHERE Quarter = t.Quarter );
- 该方案会直接返回所有同季度销售额等于最高值的销售人员,无需额外处理排名。
内容的提问来源于stack exchange,提问作者Cyclotron
相关产品推荐
相关产品推荐

