首页 > 解决方案 > 在 Postgres 中不工作的金额字段上的自我加入

问题描述

使用以下数据,我试图让相同位置和部门的员工类型为经理,其工资等于其他员工的总和

EMP_Name    EMP_Loc EMP_Dept    EMP_Sal Emp_type
Arjun       Hyd     Comp        1000    Manager
Ramesh      Hyd     Comp        500     Interim
Ragav       Hyd     Comp        300     Interim
Rajesh      Hyd     Comp        200     Interim

我已经尝试过这种方式并正确返回记录,但是如果有大量数据,这样做是否正确?

select  a.emp_dept , a.emp_loc ,a.emp_dept,b.emp_dept
     from  
     (select sum(emp_sal) as sett,emp_loc,emp_dept
                   from employee 
                   where emp_type = 'Interim'
                   group by emp_loc,emp_dept
                  ) a
                  inner join 
                  (select emp_sal ,emp_loc,emp_dept
                   from employee 
                   where emp_type = 'Manager'
                  ) b 
     on a.sett=b.emp_sal and a.emp_loc=b.emp_loc and a.emp_dept=b.emp_dept;

标签: sqlpostgresql

解决方案


使用以下数据,我试图让相同位置和部门的员工类型为经理,其工资等于其他员工的总和

您需要一个相关性子句:

select * 
from employee e
where e.emp_sal = (select sum(e2.emp_sal) 
                   from employee e2
                   where e2.emp_type = 'Interim' and
                         e2.EMP_Loc = e.EMP_Loc and
                         e2.EMP_Dept = e.EMP_Dept
                  ) and
      e.emp_type = 'Manager';

出于性能考虑,您需要在(emp_loc, emp_dept, empt_type, salary).


推荐阅读