我有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
答案 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