Sql 找到销售人员';世界第二高的销售额

Sql 找到销售人员';世界第二高的销售额,sql,sql-server,ranking-functions,Sql,Sql Server,Ranking Functions,我有三张明显的桌子,销售员,订单和顾客。在订单表中,我列出了所有订单和销售人员ID 我想找到每个有2个以上订单的销售人员,并找到第二高订单的订单值。如果要求我查找最大订单值,我可以完成此查询,但我似乎无法找到一种简单的方法来查找第二高的订单值 这里是新手,所以请放松点。提前谢谢 在过去的3个小时里,我一直在绞尽脑汁地阅读关于排号和排名的文章,但是我想不出来。我相信有一种比编写自己的自定义函数更简单的方法 Select distinct Orders.SalesID, MAX(Orde

我有三张明显的桌子,销售员,订单和顾客。在订单表中,我列出了所有订单和销售人员ID

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

这里是新手,所以请放松点。提前谢谢

在过去的3个小时里,我一直在绞尽脑汁地阅读关于排号和排名的文章,但是我想不出来。我相信有一种比编写自己的自定义函数更简单的方法

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

您可以使用
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

-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用非常不受欢迎!这就是排名函数!我只是在回到第一个“选择”之前没有加入它。Doh