在 SQLhaving 子句中使用聚合函数

问题描述 投票:0回答:1

谁能告诉我,为什么这个查询会出错

编写一个查询来查找所有员工的最大总收入(earnings)以及具有最大总收入的员工总数(num_employees)。 总收入=工作月数*工资 我们将员工的总收入定义为其每月(工资×月数)工作

SELECT
 (salary*months) as earnings 
 ,count(*) as num_employees
FROM employee
group by salary*months  
having max(salary * months)=salary*months
sql aggregate-functions having
1个回答
0
投票

您的代码存在逻辑问题。你看,

HAVING
子句用于对分组数据的结果进行过滤,因此在having子句中使用
MAX
可能不会得到你期望的结果。

如果您想查找最大总收入以及具有该最大总收入的员工数量,您可以使用子查询首先找到最大总收入,然后将其连接回原始表,如下所示:

SELECT
  e.salary * e.months as earnings,
  COUNT(*) as num_employees
FROM employee e
JOIN (
  SELECT MAX(salary * months) as max_earnings
  FROM employee
) max_earnings_query ON e.salary * e.months = max_earnings_query.max_earnings
GROUP BY e.salary * e.months;
© www.soinside.com 2019 - 2024. All rights reserved.