所以我试图找到收入最多的客户代表。 要做到这一点,我创建了一个视图:
CREATE VIEW employeeRevenue AS
SELECT E.EmployeeID AS ID, SUM(A.ClosingBid) AS Total
FROM Auction A, Employee E
WHERE A.EmployeeID = E.EmployeeID;
然后,我在这个视图上运行一个程序
CREATE PROCEDURE getBestCustomerRep()
BEGIN
SELECT E.*
FROM employeeRevenue RV, Employee E
WHERE E.EmployeeID = RV.ID AND MAX(RV.Total);
End
$$
它一直告诉我,我对组功能的使用无效。 我已经尝试添加GROUP BY和HAVING语句(但我不明白为什么在这种情况下会需要它们)
为什么这不起作用?
答案 0 :(得分:0)
您可以使用ORDER BY
和LIMIT
:
SELECT E.*
FROM employeeRevenue RV join
Employee E
ON E.EmployeeID = RV.ID
ORDER BY RV.Total DESC
LIMIT 1;
请注意使用正确的,明确的JOIN
语法。
此外,如果有多个员工具有相同的最大值,则只返回一个。
答案 1 :(得分:0)
使用像sum()这样的聚合函数时,必须在查询末尾使用group by子句,在视图中尝试:
CREATE VIEW employeeRevenue AS
SELECT E.EmployeeID AS ID, SUM(A.ClosingBid) AS Total
FROM Auction A, Employee E
WHERE A.EmployeeID = E.EmployeeID
Group by
E.Employeeid;
只要将它放在子查询中,就可以在where子句中使用aggregate函数:
Where e.employeeid = (select employeeid, max(total) from view)