2015-11-30 101 views
0

我有3個明顯的表,銷售人員,訂單和客戶。在訂單表中,我有一個所有訂單和SalesPersonID的列表。查找銷售員的第二高銷售SQL

我想查找每個有超過2個訂單的銷售人員,並找到第二個最高訂單的訂單值。如果我被要求查找MAX訂單值,我可以完成這個查詢,但我似乎無法找到一個簡單的方法來做第二高的值。

新手在這裏,所以請放輕鬆。提前致謝。

我已經絞盡腦汁地閱讀了過去3小時的ROW_Number和Rank,但無法弄清楚。和IM肯定有比寫自己的自定義功能

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

[不良習慣踢:使用舊樣式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - 在ANSI - ** 92 ** SQL標準中,舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法(**超過20年前**),其使用不受歡迎 –

回答

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 
+0

非常感謝!所以這是排名的功能!在我回到第一個「選擇」之前,我只是沒有加入。衛生署 – AbeeCrombie