查找销售人员销售额第二高的SQL

时间:2015-11-30 02:39:58

标签: sql sql-server ranking-functions

我有3个明显的表,销售人员,订单和客户。在订单表中,我有一个所有订单和SalesPersonID的列表。

我想找到每个销售人员超过2个订单,并找到第二个最高订单的订单值。如果我被要求找到MAX订单值,我可以完成此查询,但我似乎无法找到一个简单的方法来做第二个最高值。

新手在这里,所以请放轻松。提前谢谢。

在过去3个小时里,我已经绞尽脑汁读了ROW_Number和Rank但是无法弄明白。我确信有一种比编写我自己的自定义函数更简单的方法

Select distinct 
    Orders.SalesID,  MAX(Orders.OrderAmount), SalesPerson.SalesName   
From 
    Orders, SalesPerson
Where 
    Orders.SalesID = SalesPerson.SalesID
Group by 
    Orders.SalesID, SalesPerson.SalesName
Order by 
    MAX(Orders.OrderAmount) DESC

1 个答案:

答案 0 :(得分:2)

您可以使用rank功能。对于每个销售人员,根据订单金额分配等级。最高金额分配1.依此类推。

select salesname, orderamount
from (
select
rank() over(partition by s.SalesName order by o.OrderAmount desc) as rnk 
,s.SalesName  
,o.OrderAmount
From Orders o
join SalesPerson s on o.SalesID = s.SalesID) t
where rnk = 2