我在SQL中编写此查询:
select MAX(AVG(salary) ) from employees group by department_id;
首先,我会按department_id
获取小组,但接下来会发生什么?
答案 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应用于内部聚合,外部聚合未分组。