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

Posted

技术标签:

【中文标题】SQL用他们部门的平均工资更新员工的工资【英文标题】:SQL to update the salary of employees with their department's average salary 【发布时间】:2013-01-27 06:17:45 【问题描述】:

考虑表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)

那么如何查询相同的。

【问题讨论】:

我发誓我之前在这些部分看到过一个非常相似的问题...... 您的意思是要更新每个具有平均工资的员工的工资吗?还是将每个员工的工资设置为部门平均水平? 课堂上可能的相关问题:***.com/search?q=employee+%22sal%22+%22deptno%22 【参考方案1】:

试试这个

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

【讨论】:

谢谢..查询给出了正确的输出。但是有什么方法可以通过 group by 子句获得相同的结果。我只是尝试了一个,但它不起作用。 update employee set sal =(select avg(sal) from employee group by deptno) where deptno in(select deptno from employee group by deptno) @rijinrv,我的查询与您在评论中提到的完全一样,这里不需要GROUP BYIN【参考方案2】:
update employee a
set sal =  (select avg(sal) as avgsal
          from employee b
          where A.DEPTNO = b.deptno
        );

【讨论】:

【参考方案3】:

这将作为 MERGE 更有效地实现,其中 USING 子句将所有部门的薪水汇总到部门级别,并连接到 department_id 上的员工表。

【讨论】:

以上是关于SQL用他们部门的平均工资更新员工的工资的主要内容,如果未能解决你的问题,请参考以下文章

列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序(用sql语句来表达)。

写下SQL显示员工(工资大于5000)平均工资小于8000的部门

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

如何使用 SQL 分析函数选择工资低于部门平均水平的员工?

哪些员工的工资大于所在部门的平均工资?用mysql查询语句

SQL数据库 计算出每个部门的平均工资 最高工资和最低工资 语法怎么写?