我的简单SQL查询有什么问题?

我的简单SQL查询有什么问题?,sql,Sql,这个SQL查询有什么问题 SELECT department_id, MAX(AVG(SALARY)) FROM EMPLOYEES GROUP BY department_id; 它显示的不是单个组函数2个聚合函数不能在一个查询中完成,您应该使用子查询来实现您的结果 我现在不可能测试它,所以不能保证这个查询,但您可能会有一个想法 select max (avg_salary) from (select department_id, avg(SALARY) AS

这个SQL查询有什么问题

SELECT
    department_id, MAX(AVG(SALARY)) 
FROM 
    EMPLOYEES
GROUP BY 
    department_id;

它显示的不是单个组函数

2个聚合函数不能在一个查询中完成,您应该使用子查询来实现您的结果

我现在不可能测试它,所以不能保证这个查询,但您可能会有一个想法

select max (avg_salary)
from (select department_id, avg(SALARY) AS avg_salary
      from EMPLOYEES
      group by department_id);
内部查询选择部门id和平均工资。 使用AS语句,使用别名avg_salary选择Avarge salary

外部查询选择平均工资的最大值-


这可能不是你问题的一个完整解决方案,正如我所说,没有经过测试,所以没有保证,但你现在应该知道如何开始-

一个查询中不能有多个聚合函数。试试这个

select dept, max(average) over (partition by dept) 
from  (SELECT department_id dept, 
             (AVG(SALary) OVER (PARTITION BY department_id)) average 
               FROM employees);
备选方案1,双分组:

如果打成平局,我会把两个部门的id都退回

备选方案2,使用cte通用表表达式:

with
(
  SELECT department_id, AVG(SALARY) as avg_sal
  FROM  EMPLOYEES
  GROUP BY department_id
) as cte
select department_id, avg_sal
from cte
where avg_sal = (select max(avg_sal) from cte)

如果有平局,这也将返回两个部门id

你能说得更具体些吗?无法理解您的要求。您不能有2个聚合函数,请使用子查询。任何人都可以建议解决方案以使此查询正常工作。请参阅下面我编辑的答案这是用于哪个RDBMS的?请添加一个标记来指定您使用的是mysql、postgresql、sql server、oracle还是db2,或者其他完全不同的东西。我通过稍微修改您的查询得到了输出
with
(
  SELECT department_id, AVG(SALARY) as avg_sal
  FROM  EMPLOYEES
  GROUP BY department_id
) as cte
select department_id, avg_sal
from cte
where avg_sal = (select max(avg_sal) from cte)