-1

表を考えてみましょう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)

deptno次のように、の値が含まれますsal

    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

従業員の給与を部門の平均給与で更新する必要があります。つまり、すべての従業員の給与を部門の平均に設定します。groupby句で可能な解決策はありますか。

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

だから、同じようにクエリする方法。

4

3 に答える 3

3

これを試して

UPDATE EMPLOYEE A
SET SAL = (SELECT AVG(SAL) FROM EMPLOYEE B WHERE B.DEPTNO = A.DEPTNO);
于 2013-01-27T06:28:14.877 に答える
0

これは、USING 句がすべての部門の給与を部門レベルに集計し、department_id の従業員テーブルに結合する MERGE としてより効率的に実装されます。

于 2013-01-27T10:44:33.663 に答える
0
update employee a
set sal =  (select avg(sal) as avgsal
          from employee b
          where A.DEPTNO = b.deptno
        );
于 2013-01-27T06:29:17.333 に答える