SQL用他们的部门平均工资来更新员工的工资

时间:2013-01-27 06:17:45

标签: sql oracle sql-update

考虑表employee

desc employee;

Name                       Null?    Type
-------------------------- -------- ------------
EMPLOYEENO                 NOT NULL NUMBER(4)
ENAME                               VARCHAR2(15)
JOB                                 VARCHAR2(15)
MGR                                 NUMBER(4)
HIREDATE                            DATE
SAL                                 NUMBER
COMM                                NUMBER
DEPTNO                              NUMBER(2)

包含deptnosal的值为:

    DEPTNO      SAL
---------- ----------
        10     2450
        10     5000
        10     1300
        20     2975
        20     3000
        20     1100
        20      800
        20     3000
        30     1250
        30     1500
        30     1600
        30      950
        30     2850
        30     1250

需要使用他们的部门的平均工资来更新员工的工资。 即将每个员工的工资设置为部门平均值。是否有任何解决方案可以使用group by子句

update employee set sal =(select avg(sal) from employee group by deptno) where deptno in(select deptno from employee group by deptno)

那么如何查询相同的内容。

3 个答案:

答案 0 :(得分:2)

试试这个

UPDATE EMPLOYEE A
SET SAL = (SELECT AVG(SAL) FROM EMPLOYEE B WHERE B.DEPTNO = A.DEPTNO);

答案 1 :(得分:0)

update employee a
set sal =  (select avg(sal) as avgsal
          from employee b
          where A.DEPTNO = b.deptno
        );

答案 2 :(得分:0)

这可以更有效地实现为MERGE,其中USING子句将所有部门的工资汇总到部门级别并加入department_id上的employee表。