私はこのクエリを SQL で書いています:
select MAX(AVG(salary) ) from employees group by department_id;
最初に でグループを取得しますがdepartment_id
、次はどうなるでしょうか。
私はこのクエリを SQL で書いています:
select MAX(AVG(salary) ) from employees group by department_id;
最初に でグループを取得しますがdepartment_id
、次はどうなるでしょうか。
こんなのあったら
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
したがって、以下のクエリは、部門 ID 3 の最大平均給与として 45 を返します。
SELECT MAX(x.avg)
FROM ( SELECT AVG(salary)as avg FROM employees group by department_id)x;
ほとんどの場合、RDBMS によっては、これをサブクエリで行う必要があります。
select max(AveragesByDept.avgSalary)
from (
select avgSalary=avg(salary)
from employees
group by department_id
) AveragesByDept
これを行うには、1 行を取得するだけです。例えば:
select AVG(salary)
from employees
group by department_id
order by avg(salary) desc
limit 1
(SQL Server) または(Oracle)を使用したサブクエリであるlimit 1
可能性があります。top 1
rownum = 1
これは RDBMS のサポートに依存していますが、サポートされている場合は、給与の部門平均が最大になります。
group by は内側の集計に適用され、外側の集計はグループ化されません。