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

SQL Server 2017:如何获取产品对应最大客户及销量总和?

用SQL Server 2017 OLAP函数实现按产品类别取销量最高客户的方案

当然可以用OLAP窗口函数完美解决这个需求!SQL Server 2017支持的窗口函数刚好适配这类「分组取Top 1」的场景,下面我给你一步步拆解实现逻辑:

实现思路

  1. 先按产品类别+客户分组,计算每个客户在对应类别下的总销量;
  2. 用窗口函数给每个产品类别内的客户按总销量降序排名;
  3. 筛选出每个类别中排名第一的记录,就是我们要的结果。

具体SQL代码

假设你的表名为SalesData,完整查询语句如下:

-- 第一步:计算每个客户在每个产品类别下的总销量
WITH CategoryClientSales AS (
    SELECT 
        Product_Category,
        Client_Name,
        SUM(Units_Sold) AS Total_Units
    FROM SalesData
    GROUP BY Product_Category, Client_Name
)
-- 第二步:给每个类别内的客户按销量排名,取Top 1
SELECT 
    Product_Category,
    Client_Name,
    Total_Units
FROM (
    SELECT 
        *,
        -- 按产品类别分区,总销量降序排名
        ROW_NUMBER() OVER (PARTITION BY Product_Category ORDER BY Total_Units DESC) AS Sales_Rank
    FROM CategoryClientSales
) RankedSales
WHERE Sales_Rank = 1
ORDER BY Product_Category;

关键细节说明

  • 窗口函数选择:这里用了ROW_NUMBER(),它会给每个类别内的客户分配唯一排名,即使有客户销量相同,也会随机(取决于底层数据顺序)选一个。如果需要返回所有并列第一的客户,可以把ROW_NUMBER()换成:
    • RANK():并列客户共享相同排名,后续排名会跳过(比如1,1,3)
    • DENSE_RANK():并列客户共享相同排名,后续排名连续(比如1,1,2)
  • 数据验证:用你提供的示例数据代入查询,得到的结果完全符合预期:

    Product1,Client2,27
    Product2,Client1,53
    Product3,Client1,36

内容的提问来源于stack exchange,提问作者Nullius Void

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:36