如何通过聚合函数max和sum显示最大值?

时间:2015-03-30 22:23:17

标签: sql-server-2012 sum max

如何显示产生许多员工所赚取的最大收入的记录。我相信汇总功能' MAX' &安培; ' SUM'可能会适用,但我无法做到。最终,我不希望显示列" most_revenue'。涉及2个表。如果需要,我很乐意提供更多信息。

以下是我的尝试并且有效,但不是根据我的需要:

SELECT TOP (1) pa.personID, pa.nric, SUM(gd.bookingFee) AS most_revenue
FROM Person_Emp AS pa
INNER JOIN Geo_Date AS gd
ON (pa.personID = gd.employeeID)
GROUP BY pa.personID, pa.nric
;

表结构&样本数据, Geo_Date关系:

dateID  |  bookingFee  |  employeeID
   1           25             16
   2           10             17
   3           15             17
   4           20             17
  ...

Person_Emp关系

personID    |     NRIC
16          |  3453535345         
17          |  1231312
18          |  13413413
19          |  123434411
20          |  12312312

因此,我必须展示一名“员工”。谁产生了最多的收入,应该是personID' 17'在这种情况下,与personID' 16'相比,他总共赚了45美元。

当然,在我确认其他人获得的最高金额之前,我需要总结每个personID所赚取的总收入。非常感谢!

1 个答案:

答案 0 :(得分:0)

由于您使用的是SQL Server 2012,因此您可以使用rank()之类的窗口函数来执行此操作。

select personID 
from (
    select personID, rank() over (order by sum(bookingFee) desc) sales_rank
    from person_emp pe
    left join geo_date gd on pe.personID = gd.employeeID
    group by personID
) data
where sales_rank = 1

如果你有多个总数相同的人,他们都会获得等级1并被退回。

或仅使用max()sum()并且不使用窗口功能:

select pe.personID
from person_emp pe
left join geo_date gd on pe.personID = gd.employeeID
group by pe.personID
having sum(bookingfee) = (
    select max(sum_of_bookingfee) 
    from (
       select employeeID, sum(bookingFee) sum_of_bookingfee 
       from geo_date 
       group by employeeID
    ) data
)