有两张桌子
Employee
Id
Name
Salary
DepartmentId
和
Departament
Id
Name
我怎样才能在两张表中获得最高的平均工资
Joe and Max belong to dept 1 so, avg is (70K+90K)/2
= 80K
和
Henry and Sam belog to dept 2, avg is (80K + 60K)/2=70k
那么如何选择deptno的最高平均工资?在这种情况下
IT 80K
我已经试了:
'将每个部门的薪水分组,并使用Max函数获得最高的薪水。
select
Department.Name as Department,
T.M as Salary
from
Employee,
Department,
(select DepartmentId as ID, Max(Salary) as M from Employee group by DepartmentId) as T
where
Employee.Salary = T.M and
Department.Id = T.ID and
Employee.DepartmentId = Department.Id
如果您想要完整答案,则应提供DDL,样本数据和所需结果。如果我理解正确,你正在寻找类似的东西:
SELECT DepartmentID, AVG(Salary) AS AverageSalaryForDept
FROM Employee
GROUP BY DepartmentID
ORDER BY AverageSalaryForDept DESC;
这将为您提供从最高到最低排序的所有平均值。现在,如果您只想要最上面一个,请添加一个FETCH子句:
SELECT DepartmentID, AVG(Salary) AS AverageSalaryForDept
FROM Employee
GROUP BY DepartmentID
ORDER BY AverageSalaryForDept DESC
OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
HTH
如果你想获得部门的平均值,你可以这样使用。
select DepartmentId as ID, de.name as Deptname, Avg(Salary) as M from Employee em1
join Department de on de.departmentID = em1.DepartmentId
group by DepartmentId, de.name
如果您想要员工姓名以及最高平均值,那么您也可以使用此方法。
select
Deptname as Department,
e.Name as Employeename,
z.M as Salary
from
Employee e
join
( select DepartmentId,Deptname, M, row_number() (order by m desc) rownum from ( select DepartmentId as ID, de.name as Deptname, Avg(Salary) as M from Employee em1
join Department de on de.departmentID = em1.DepartmentId
group by DepartmentId, de.name) as T) z
on
e.DepartmentId = T.DepartmentId and z.rownum = 1
如果多个部门具有相同的最大平均工资,则此解决方案将返回多行。
SELECT *
FROM(
SELECT d.Id, d.Name, AVG(e.Salary) avg_salary, RANK() OVER(ORDER BY AVG(e.Salary) DESC) AS rank_
FROM Employee e
INNER JOIN Departament d ON e.DepartmentId = d.Id
GROUP BY d.Id, d.Name
)T
WHERE rank_ = 1