查找Salesperson第二高的销售SQL
Posted
技术标签:
【中文标题】查找Salesperson第二高的销售SQL【英文标题】:Find Salesperson's second highest sale SQL 【发布时间】:2015-11-30 02:39:57 【问题描述】:我有 3 个明显的表格,销售人员、订单和客户。在订单表中,我列出了所有订单和 SalesPersonID。
我想找到每个订单超过 2 个的销售人员,并找到第二高订单的订单价值。如果我被要求找到最大订单价值,我可以完成此查询,但我似乎无法找到一种简单的方法来获得第二高的价值。
这里是新手,所以请放轻松。提前致谢。
在过去的 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
【问题讨论】:
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSIJOIN
语法-92 SQL 标准(20 多年前),不鼓励使用它
【参考方案1】:
您可以使用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
【讨论】:
非常感谢!所以这是等级函数!在我回到第一个“选择”之前,我只是没有加入它。呵呵以上是关于查找Salesperson第二高的销售SQL的主要内容,如果未能解决你的问题,请参考以下文章