8

私はこのクエリを SQL で書いています:

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

最初に でグループを取得しますがdepartment_id、次はどうなるでしょうか。

4

4 に答える 4

16

こんなのあったら

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;
于 2013-06-10T18:10:52.750 に答える
5

ほとんどの場合、RDBMS によっては、これをサブクエリで行う必要があります。

select max(AveragesByDept.avgSalary) 
from ( 
    select avgSalary=avg(salary) 
    from employees
    group by department_id
    ) AveragesByDept
于 2013-06-10T18:04:49.500 に答える
2

これを行うには、1 行を取得するだけです。例えば:

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

(SQL Server) または(Oracle)を使用したサブクエリであるlimit 1可能性があります。top 1rownum = 1

于 2013-06-10T18:12:30.000 に答える
1

これは RDBMS のサポートに依存していますが、サポートされている場合は、給与の部門平均が最大になります。

group by は内側の集計に適用され、外側の集計はグループ化されません。

于 2013-06-10T18:05:06.993 に答える