如何编写汇总工资的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询emp表中的工资

查询各个部门中各职位的人数与平均工资? 查询工资,奖金与10号部门某员工工资,奖金都相同的员工? SQL

如何使用sql编写查询语句 用于查询学生的 各科成绩

如何在查询中与工人及其旁边的经理一起编写查询

如何编写这两个(ANSI)SQL 查询?

如何编写参数化的 SQL 查询?