SQL 查询找出地区最高总销售额的代表

问题描述 投票:0回答:2

我有以下数据集:

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
sql sql-server greatest-n-per-group
2个回答
0
投票

您可以使用窗口

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

小提琴


0
投票

这可能是

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)
© www.soinside.com 2019 - 2024. All rights reserved.