查找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 ANSI JOIN 语法-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的主要内容,如果未能解决你的问题,请参考以下文章

176. 第二高的薪水

LeetCode176——第二高的薪水

LeetCode--176--第二高的薪水

LeetCode - 176. 第二高的薪水

力扣——第二高的薪水(数据库的题

leetcode(176)第二高的薪水