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