计算员工工资与工作组平均工资之间的差额

时间:2015-03-08 21:59:50

标签: sql

给出如下表格:

Employee (emp_no, emp_fname, emp_lname, emp_salary, job_title) 

如何编写每个员工计算差异的查询 在他/她的工资与他/她的工作组的平均工资之间?

获得平均值。我使用的每个小组的薪水:

Select job_title, avg(emp_salary) as avg_salary 
from employee group by job_title;

但是我很难找到薪水与平均水平之间的差异。每个职位的薪水。

3 个答案:

答案 0 :(得分:3)

根据您使用的数据库,您可以使用窗口函数或CTE更有效地达到此目的。但是,一个SQL解决方案应该可以使用几乎任何基于SQL的数据库,如下所示:

    SELECT a.emp_no,
           a.emp_fname, 
           a.emp_lname, 
           a.job_title, 
          (a.emp_salary - b.emp_salary) as salary_difference 
FROM employee AS a
INNER JOIN (
     SELECT job_title, avg(emp_salary)as emp_salary from employee group by    
             job_title) as b
    ON a.job_title = b.job_title

答案 1 :(得分:1)

或者,您也可以使用子查询来获取此问题的答案,如下所示。

第1步:创建一个查询以获取员工工资的平均值。

Step2:将在步骤1中创建的查询用作子查询,并将其从主查询的查询中减去 工资栏。

代码: SELECT first_name,last_name,salary ,salary-(SELECT AVG(salary) FROM employees) AS 'SalDiff' FROM employees;

答案 2 :(得分:0)

如果您使用的是具有窗口功能的DBMS(例如,SQL Server,Oracle,PostgreSQL),您可以执行以下操作:

SELECT emp_name, emp_salary - AVG(emp_salary) OVER ( PARTITION BY job_title ) salary_diff
  FROM employee;