我的简单SQL查询有什么问题?
这个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
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)