如何用SQL实现按年度销售额筛选Top3品牌并展示其季度数据
多品类年度Top3品牌季度销售数据SQL实现方案
核心思路
先通过窗口函数计算每个品类下各品牌的年度销售额排名,筛选出年度Top3,再关联回原始表提取对应品牌的分季度数据,最后按要求排序。
具体SQL实现
假设数据表名为alcohol_sales,字段对应Year(年份)、Quarter(季度)、Type(品类)、Brand(品牌)、Sales(销售额),代码如下:
WITH top3_brands AS ( SELECT Year, Type, Brand, SUM(Sales) AS annual_sales, -- 按年份+品类分组,对年度销售额降序排名 RANK() OVER (PARTITION BY Year, Type ORDER BY SUM(Sales) DESC) AS brand_rank FROM alcohol_sales GROUP BY Year, Type, Brand HAVING brand_rank <= 3 ) -- 关联原始表获取目标季度数据 SELECT s.Year, s.Quarter, s.Type, s.Brand, s.Sales FROM alcohol_sales s INNER JOIN top3_brands t ON s.Year = t.Year AND s.Type = t.Type AND s.Brand = t.Brand -- 按品类、年份、季度排序,同季度内按销售额降序 ORDER BY s.Type, s.Year, s.Quarter, s.Sales DESC;
关键细节说明
- 排名函数选择:用
RANK()会保留销售额并列的Top3品牌(比如两个品牌同排第3,都会被纳入);如果需要严格取3个不同的品牌,改用ROW_NUMBER(),但会忽略并列情况,根据业务需求调整。 - 多品类适配:通过
PARTITION BY Year, Type实现按年份+品类独立计算排名,无需指定具体品类或品牌,自动适配所有品类。 - 关联逻辑:通过年份、品类、品牌三个维度关联,确保只提取Top3品牌的对应季度数据,排除非目标品牌。
内容的提问来源于stack exchange,提问作者Ying W
相关产品推荐
相关产品推荐

