Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按区域显示排名靠前的结果_Sql_Sql Server_Group By_Count_Greatest N Per Group - Fatal编程技术网

Sql 按区域显示排名靠前的结果

Sql 按区域显示排名靠前的结果,sql,sql-server,group-by,count,greatest-n-per-group,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 Nor

我有下表:

表顺序

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

如何检索此信息?

您可以使用窗口功能-如果您未告知的数据库支持这些功能:

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\u number()

  • 请按卖方和地区查询总数

  • 根据之前的总数计算各地区的最大销售额,并根据该总数确定相关卖家

    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
    

  • 请记住,如果您有两个卖家的最大销售额相同,那么他们将被包括在查询中。

    如果您尝试了什么以及遇到了什么问题,那就太好了。