SQL查询中实现分组后的Top

CREATE TABLE Sales (
    SellerID INT,
    ProductID INT,
    SaleAmount DECIMAL(10,2),
    PRIMARY KEY (SellerID, ProductID)
);

-- 插入一些示例数据
INSERT INTO Sales (SellerID, ProductID, SaleAmount) VALUES
(1, 1001, 5000.00),
(1, 1002, 4500.00),
(1, 1003, 3000.00),
(2, 2001, 7000.00),
(2, 2002, 6000.00),
(2, 2003, 5500.00),
-- ... 更多销售记录...

-- 现在我们要找出每个销售人员销售额最高的前2个产品
-- 使用窗口函数实现(假设你使用的是支持窗口函数的数据库,如MySQL 8.0+,PostgreSQL,SQL Server,Oracle等)

WITH SalesRanked AS (
    SELECT SellerID, ProductID, SaleAmount,
           ROW_NUMBER() OVER (PARTITION BY SellerID ORDER BY SaleAmount DESC) AS Rank
    FROM Sales
)
SELECT SellerID, ProductID, SaleAmount
FROM SalesRanked
WHERE Rank <= 2;

        这段代码首先创建了一个名为Sales的表,并插入了一些示例数据。然后,我们创建了一个名为SalesRanked的公共表表达式(CTE),在其中使用了ROW_NUMBER()窗口函数对每个销售人员的销售额进行排序。最后,我们从SalesRanked中选择了那些排名(Rank)小于等于2的行,即每个销售人员销售额最高的前2个产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值