如何编写汇总工资的 SQL 查询
Posted
技术标签:
【中文标题】如何编写汇总工资的 SQL 查询【英文标题】:How to write the SQL query for summarizing salary 【发布时间】:2019-08-08 15:53:57 【问题描述】:问。我想要一个更新查询来更新部门中员工的工资总和 表
DEPT table : columns :: DEPTNO DNAME LOC SUM_SAL
10 'CC' 'BLR'
20 'ADMIN' 'DEL'
30 'HR' 'CAL'
update a
set sum_sal = b.sum_sal
from dept a,
(select deptno, sum(sal) sum_sal from emp group by deptno ) b
where a.deptno = b.deptno;
但它不起作用
update a
set sum_sal = b.sum_sal
from dept a,
(select deptno, sum(sal) sum_sal from emp group by deptno ) b
where a.deptno = b.deptno;
update a
set sum_sal = b.sum_sal
from dept a,
(select deptno, sum(sal) sum_sal from emp group by deptno ) b
where a.deptno = b.deptno;
from dept a,
第 3 行出现错误:ORA-00933:SQL 命令未正确结束
【问题讨论】:
错误“未正确结束”是因为您有一个,
而不是;
而且update
中没有from
关键字。也许你想要merge
。
【参考方案1】:
Oracle 不支持 update
中的 from
子句。
只需使用相关子查询:
update dept
set sum_sal = (select sum(e.sal) from emp e where e.deptno = dept.deptno);
【讨论】:
【参考方案2】:一种选择是在更新语句中使用with..as select ...
子句:
update dept d
set d.sum_sal =
( with e as (
select *
from emp
)
select sum(e.sal)
from e
where e.deptno = d.deptno
group by e.deptno
);
Demo
【讨论】:
【参考方案3】:您可以使用MERGE
语句,因为它是MERGE
的良好候选者
尝试以下查询:
MERGE INTO DEPT D
USING
(
SELECT
E.DEPTNO,
SUM(E.SAL) SUM_SAL
FROM
EMP E
GROUP BY
E.DEPTNO
) E
ON ( E.DEPTNO = DEPT.DEPTNO )
WHEN MATCHED THEN
UPDATE SET D.SUM_SAL = E.SUM_SAL;
干杯!!
【讨论】:
以上是关于如何编写汇总工资的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章