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个产品。