Показать лучший результат по регионам - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть следующая таблица:

Таблица заказов

OrderID    Region    CustomerID    SalesPersonID
  1         North      01               001
  2         North      12               002
  3         North      33               002
  4         North      55               002
  5         North      21               001
  6         North      11               002
  7         North      33               004
  8         North      15               002
  9         East       23               005
 10         East       01               005
 11         East       12               005
 12         East       33               007
 13         East       55               005
 14         East       21               006
 15         East       11               006
 16         East       33               006
 17         East       15               007
 10         East       34               007

Я хочу показать продавца с большинством заказов в каждом регионе. Таким образом, мой конечный результат должен выглядеть следующим образом:

Region     SalesPerson    Orders
North         002           5
East          005           4

Как я могу получить эту информацию?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете использовать оконные функции - если ваша база данных, которую вы не указали, поддерживает их:

select Region, SalesPersonID, Orders
from (
    select 
        Region, 
        SalesPersonID, 
        count(*) orders, 
        rank() over(partition by Region order by count(*) desc) rn
    from orders
    group by Region, SalesPersonID
) t
where rn = 1

rank() разрешает верхние связи, если таковые имеются. Вы можете использовать row_number(), если хотите получить только один результат на регион, даже если есть связи.

0 голосов
/ 13 апреля 2020
  1. Просмотрите итоги по продавцам и регионам.

  2. С предыдущими итогами рассчитайте максимальную продажу по регионам, и с этими итогами должны быть определены соответствующие продавцы

    with Totales as 
    (
      select Region,SalesPersonID,count(1) As Totales 
      from sales
      group by Region,SalesPersonID
    )
    ,MaxRegion as
    (
      select Region,max(Totales) As Totales
      from totales
      group by Region
    )
    select MaxRegion.Region,Totales.SalesPersonID,MaxRegion.Totales 
    from MaxRegion 
        inner join Totales on MaxRegion.Region=Totales.Region and MaxRegion.Totales=Totales.Totales
    

Пример

Имейте в виду, что если у вас два продавца с одинаковым количеством максимальных продаж, они будут включены в запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...