首页 > 解决方案 > 如何在从另一列获取其他值的同时使用 Max?

问题描述

我是 SQL 新手,在为每个 manager_id 以及同一行中的其他信息选择列的最大值时遇到问题。

让我举个例子——考虑一下这张表:

姓名 manager_id 销售量
约翰 1 100
大卫 1 80
赛琳娜 2 26
狮子座 1 120
坦率 2 97
萨拉 2 105

我期待的结果是这样的:

姓名 manager_id top_sales
狮子座 1 120
萨拉 2 105

我尝试使用 Max,但问题是我必须将其manager_idsalesPerson.

select manager_id, max(sales) as top_sales 
from table 
group by manager_id ; 

这只是一个示例,实际查询很长,我从不同的表中获取信息。我知道我可以使用同一个表并再次加入它,但问题是正如我提到的,这个查询很长,因为我从具有多个条件的不同表中提取信息。而且我不想制作一个临时表来保存它。它应该在一个查询中完成,实际上我确实解决了这个问题,但是由于我使用了内部连接并两次制作了原始表,因此查询超长。

我的问题是我可以使用 Max 并在 name 列中有值,还是有其他方法可以解决这个问题?

感谢所有帮助

标签: sql

解决方案


您可以将 row_number() 与 CTE 结合使用,以获得每位经理的最高销售额,如下所示:

with MaxSales as (
select name, manager_id, sales,row_number() over (partition by manager_id order by sales desc) rownumber from table 
)
select name , manager_id ,sales from MaxSales  where rownumber=1

推荐阅读