求一句SQL代码
表的字段为:门店、员工、销售金额。现在想用一句SQL语句提取每个门店的前3名员工的信息和销售,以开展年终表彰奖励求高手赐教,谢谢!
程序代码:CREATE TABLE StoreSales (
ID INT IDENTITY(1,1) PRIMARY KEY,
StoreName NVARCHAR(50) COLLATE Chinese_PRC_CI_AS NOT NULL,
EmployeeName NVARCHAR(50) COLLATE Chinese_PRC_CI_AS NOT NULL,
SalesAmount DECIMAL(10,2) NOT NULL,
SalesDate DATE DEFAULT GETDATE()
);
INSERT INTO StoreSales (StoreName, EmployeeName, SalesAmount) VALUES
(N'北京店', N'张三', 150000.00),
(N'北京店', N'李四', 180000.00),
(N'北京店', N'王五', 220000.00),
(N'北京店', N'赵六', 120000.00),
(N'北京店', N'钱七', 190000.00),
(N'北京店', N'孙八', 210000.00),
(N'上海店', N'周九', 130000.00),
(N'上海店', N'吴十', 160000.00),
(N'上海店', N'郑十一', 140000.00),
(N'上海店', N'王十二', 170000.00),
(N'上海店', N'李十三', 150000.00),
(N'广州店', N'陈十四', 250000.00),
(N'广州店', N'林十五', 230000.00),
(N'广州店', N'黄十六', 240000.00),
(N'广州店', N'刘十七', 200000.00),
(N'深圳店', N'马十八', 110000.00),
(N'深圳店', N'朱十九', 115000.00),
(N'深圳店', N'胡二十', 120000.00);
SELECT
t1.StoreName,
t1.EmployeeName,
t1.SalesAmount,
COUNT(*) as 排名
FROM StoreSales t1
LEFT JOIN StoreSales t2 ON
t1.StoreName = t2.StoreName
AND t1.SalesAmount <= t2.SalesAmount
GROUP BY t1.StoreName, t1.EmployeeName, t1.SalesAmount
HAVING COUNT(*) <= 3
ORDER BY t1.StoreName, COUNT(*);修正如果有并列情况的排名:
程序代码:SELECT
t1.StoreName as 门店,
t1.EmployeeName as 员工,
t1.SalesAmount as 销售金额,
COUNT(DISTINCT t2.SalesAmount) + 1 as 排名
FROM StoreSales t1
LEFT JOIN StoreSales t2 ON
t1.StoreName = t2.StoreName
AND t1.SalesAmount < t2.SalesAmount -- 注意:是小于,不是小于等于
GROUP BY t1.StoreName, t1.EmployeeName, t1.SalesAmount
HAVING COUNT(DISTINCT t2.SalesAmount) < 3
ORDER BY t1.StoreName, 排名, t1.EmployeeName;[此贴子已经被作者于2025-12-30 10:26编辑过]