我的查询存在问题,该问题适用于以下问题:
+---------------------------+
| ID NAME SALARY DEPARTMENT |
+---------------------------+
| 1 John 100 Accounting |
| 2 Mary 200 IT |
+---------------------------+
我想要实现的是找到查询,这将产生以下结果:
对于每位员工,找到那些薪水比雇员的工资高100多或少100的雇员的平均工资,并且他们在同一个部门工作。
到目前为止,我有这个:
SELECT E1.ID, AVG(E2.SALARY) FROM E1 EMP, E2 EMP
WHERE ABS(E1.SALARY-E2.SALARY)<= 100 AND E1.DEPARTMENT = E2.DEPARTMENT
GROUP BY E1.NAME
这是对的吗?
答案 0 :(得分:2)
您最好使用显式连接语法:
SELECT E1.ID, AVG(E2.SALARY)
FROM EMP E1
JOIN EMP E2
ON E1.ID <> E2.ID AND
E1.DEPARTMENT = E2.DEPARTMENT AND
ABS(E1.SALARY - E2.SALARY) <= 100
GROUP BY E1.ID
如果您不希望在平均计算中包含同一员工的薪水,则必须使用谓词E1.ID <> E2.ID
。