如何显示产生许多员工所赚取的最大收入的记录。我相信汇总功能' 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所赚取的总收入。非常感谢!
答案 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
)