给出如下表格:
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;
但是我很难找到薪水与平均水平之间的差异。每个职位的薪水。
答案 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;