嵌套聚合函数,Max(Avg()),在SQL中

时间:2013-06-10 18:02:46

标签: sql

我在SQL中编写此查询:

select MAX(AVG(salary) ) from employees group by department_id;

首先,我会按department_id获取小组,但接下来会发生什么?

4 个答案:

答案 0 :(得分:10)

如果你有类似的东西

EmployeeId DepartmentId Salary
    1          1         10              
    2          1         30
    3          2         30
    4          2         40
    5          2         20
    6          3         40
    7          3         50
分组后

DepartmentId    AVG(Salary) 
    1             (10+30)/2 = 20
    2             (30+40+20)/3 = 30
    3             (40+50)/2= 45

因此,下面的查询将返回45作为departmentId 3的最高平均工资

SELECT MAX(x.avg) 
FROM ( SELECT AVG(salary)as avg FROM employees group by department_id)x;

答案 1 :(得分:3)

很可能,依赖于您的RDBMS,这将需要使用子查询(

select max(AveragesByDept.avgSalary) 
from ( 
    select avgSalary=avg(salary) 
    from employees
    group by department_id
    ) AveragesByDept

答案 2 :(得分:2)

你可以通过获得一行来做到这一点。例如:

select AVG(salary)
from employees
group by department_id
order by avg(salary) desc
limit 1

limit 1可能是top 1(SQL Server)或带有rownum = 1(Oracle)的子查询。

答案 3 :(得分:1)

它依赖于RDBMS支持,但是如果它得到支持,你将获得部门薪水中最大的平均值。

group by应用于内部聚合,外部聚合未分组。