考虑表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
需要使用他们的部门的平均工资来更新员工的工资。 即将每个员工的工资设置为部门平均值。是否有任何解决方案可以使用group by子句
update employee set sal =(select avg(sal) from employee group by deptno) where deptno in(select deptno from employee group by deptno)
那么如何查询相同的内容。
答案 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表。