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

how do I display the maximum value via aggregate functions max and sum?

如何显示许多员工获得的最大收入的记录。我相信聚合函数 '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
;

Table 结构和示例数据, 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

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

当然,我需要先把每个personID的总收入加起来,才能确定其中最高的收入。非常感谢!

由于您使用的是 SQL Server 2012,因此您可以使用 window 函数,例如 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() 而没有 window 函数:

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
)