我有以下数据集:
CREATE TABLE OrderHistory
(
OrderDate DATETIME,
Representative NVARCHAR(20),
Region NVARCHAR(10),
UnitSales INT
);
INSERT INTO OrderHistory
VALUES
('2014-09-01', 'Smith', 'Central', 2),
('2015-06-17', 'Kivell', 'Central', 5),
('2015-09-10', 'Gill', 'Central', 7),
('2015-11-17', 'Jardine', 'Central', 11),
('2015-10-31', 'Andrews', 'Central', 14),
('2014-02-26', 'Gill', 'Central', 27),
('2014-10-05', 'Morgan', 'Central', 28),
('2015-12-21', 'Andrews', 'Central', 28),
('2014-02-09', 'Jardine', 'Central', 36),
('2015-08-07', 'Kivell', 'Central', 42),
('2015-01-15', 'Gill', 'Central', 46),
('2014-01-23', 'Kivell', 'Central', 50),
('2015-03-24', 'Jardine', 'Central', 50),
('2015-05-14', 'Gill', 'Central', 53),
('2015-07-21', 'Morgan', 'Central', 55),
('2015-04-10', 'Andrews', 'Central', 66),
('2014-12-12', 'Smith', 'Central', 67),
('2014-04-18', 'Andrews', 'Central', 75),
('2015-05-31', 'Gill', 'Central', 80),
('2015-02-01', 'Smith', 'Central', 87),
('2014-05-05', 'Jardine', 'Central', 90),
('2014-06-25', 'Morgan', 'Central', 90),
('2015-12-04', 'Jardine', 'Central', 94),
('2014-11-25', 'Kivell', 'Central', 96),
('2015-02-18', 'Jones', 'East', 4),
('2014-11-08', 'Parent', 'East', 15),
('2014-09-18', 'Jones', 'East', 16),
('2014-07-12', 'Howard', 'East', 29),
('2014-08-15', 'Jones', 'East', 35),
('2014-04-01', 'Jones', 'East', 60),
('2014-06-08', 'Jones', 'East', 60),
('2015-07-04', 'Jones', 'East', 62),
('2014-10-22', 'Jones', 'East', 64),
('2014-12-29', 'Parent', 'East', 74),
('2014-07-29', 'Parent', 'East', 81),
('2014-01-06', 'Jones', 'East', 95),
('2015-04-27', 'Howard', 'East', 96),
('2015-08-24', 'Sorvino', 'West', 3),
('2015-03-07', 'Sorvino', 'West', 7),
('2014-05-22', 'Thompson', 'West', 32),
('2014-03-15', 'Sorvino', 'West', 56),
('2015-10-14', 'Thompson', 'West', 57),
('2015-09-27', 'Sorvino', 'West', 76);
忽略日期,如何编写查询来回答以下问题?
按销量计算,谁是每个地区的最高代表?
预期输出:
Representative, Region, TotalUnitsSoldByHim
这是我到目前为止尝试过的:
SELECT
Region, MAX(all_units) AS Max_Units,
FROM
(SELECT DISTINCT
t1.Region, t1.Rep,
t2.total_units AS all_units
FROM
SALES t1
JOIN
(SELECT
Rep, SUM(Units) AS total_units
FROM
SALES
GROUP BY
Rep) t2 ON t1.Rep = t2.Rep) temp
GROUP BY
Region
您可以使用窗口
ROW_NUMBER()
获得每个地区的最佳销售人员
WITH numb AS(
SELECT
Representative ,
Region ,
SUM(UnitSales) salestotal,
ROW_NUMBER() OVER(PARTITION BY region ORDER by SUM(UnitSales) DESC) rn
FROM OrderHistory
GROUP BY Representative ,
Region)
SELECT
Representative ,
Region ,
salestotal
FROM numb WHERE rn = 1
代表 | 地区 | 总销售额 |
---|---|---|
怡和 | 中环 | 281 |
琼斯 | 东 | 396 |
索维诺 | 西 | 142 |
这可能是
WITH TIES
的好地方,这使得查询更短:
select top (1) with ties rep, region, sum(units) as total_units
from mytable t
group by rep, region
order by row_number() over(partition by region order by sum(units) desc)