如何在SQL中按国家和月份筛选出销量最高的汽车厂商?
解决方法
要获取每个国家、每个月销量最高的厂商,你可以在现有统计逻辑的基础上,使用窗口函数对分组后的销量进行排名,再筛选出排名第一的记录。以下是具体实现:
完整SQL代码
WITH MonthlySales AS ( SELECT Country, DATENAME(MONTH, Date) AS Month, Manufacturer, COUNT(*) AS no_of_sales FROM your_table_name -- 替换为你的实际表名 GROUP BY Country, DATENAME(MONTH, Date), Manufacturer ), RankedSales AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Country, Month ORDER BY no_of_sales DESC) AS sales_rank FROM MonthlySales ) SELECT Country AS 国家, Month AS 月份, Manufacturer AS 厂商, no_of_sales AS 销量 FROM RankedSales WHERE sales_rank = 1 ORDER BY Country, Month;
代码说明
- MonthlySales:这部分就是你原本写的统计逻辑,先计算出每个国家、每个月、每个厂商的销售总量。
- RankedSales:通过
ROW_NUMBER()窗口函数,按「国家+月份」进行分组(PARTITION BY),再按销量降序排序,给每个分组内的记录标注排名。 - 最终筛选:只保留排名为1的记录,就能得到每个国家每个月销量最高的厂商数据。
补充说明
如果存在多个厂商在同一国家、同一月销量相同且均为最高的情况:
- 用
ROW_NUMBER()只会返回其中一条; - 若要展示所有并列第一的厂商,可将
ROW_NUMBER()替换为RANK()或DENSE_RANK()。
内容的提问来源于stack exchange,提问作者singlequit
相关产品推荐
相关产品推荐

