按地区显示热门结果

时间:2020-04-12 22:34:33

标签: sql sql-server group-by count greatest-n-per-group

我有下表:

餐桌订单

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 个答案:

答案 0 :(得分:1)

您可以使用窗口函数-如果您未告知的数据库支持它们:

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()

答案 1 :(得分:0)

  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
    

Example

请记住,如果您有两个卖方的最大销售数量相同,则它们将包含在查询中。