【问题标题】:Invalid use of group function MySql组函数MySql的使用无效
【发布时间】:2015-10-22 01:58:21
【问题描述】:

所以我正在努力寻找收入最多的客户代表。 为此,我创建了一个视图:

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 功能的使用无效。 我尝试添加 GROUP BY 和 HAVING 语句(但我不明白为什么在这种情况下需要它们)

为什么这不起作用?

【问题讨论】:

  • 因为您不能将聚合函数放在WHERE 子句中。

标签: mysql sql database group-by


【解决方案1】:

您可以使用ORDER BYLIMIT

SELECT E.*
FROM employeeRevenue RV join
     Employee E
     ON E.EmployeeID = RV.ID 
ORDER BY RV.Total DESC
LIMIT 1;

注意使用正确、明确的JOIN 语法。

另外,如果有多个员工的最大值相同,则只返回一个。

【讨论】:

  • 这成功了!谢谢!避免在 Where 子句中使用聚合器的巧妙方法
  • 对不起,我试图将两个答案都标记为正确,但不确定我该如何做到这一点
【解决方案2】:

当使用 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子句中使用聚合函数,只要你把它放到子查询中:

Where e.employeeid = (select employeeid, max(total) from view)

【讨论】:

  • 随时伴侣。这也可以与 in 运算符一起使用,即employeeid 在哪里(选择employeeid, sum(swag) as swagger,from employees where name like '%swagmaster%')..嘿,接受我的答案怎么样?我想我会为此获得积分或其他东西吗?
猜你喜欢
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2021-11-21
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多