2015-03-08 71 views
0

给定一个表,如:计算员工工资和工作组的平均工资之间的差额

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; 

但我很努力地找到工资和平均值之间的差异。每个职位的薪资。

+1

这是什么数据库? – OldProgrammer 2015-03-08 22:03:26

回答

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 
+0

谢谢。这是工作。 :-) – 2015-03-08 23:28:28

+0

很高兴听到它! – evanv 2015-03-09 02:23:52

0

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

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