减去多行查询

时间:2015-02-04 20:03:23

标签: sql oracle oracle11g

我正在尝试编写一个sql查询,以确定去年每个部门因新员工的工资增加了多少。

表结构是Employees(empno,deptno,msal,hiredate)

我可以弄清楚如何通过部门获得所有工资

SELECT sum(msal) FROM employees GROUP BY deptno;

以及如何从过去一年中被雇用的人那里获得工资

SELECT sum(msal) FROM employees WHERE hiredate > (DATEADD(year, -1, GETDATE())) GROUP BY deptno;

但无论如何我试图减去这两个查询的结果我只会得到错误。

2 个答案:

答案 0 :(得分:2)

这是你可能会做的。在这种情况下,我使用CASE语句来过滤新员工:

SELECT SUM(msal) - SUM(CASE WHEN hiredate > ADD_MONTHS(SYSDATE, -12) THEN msal ELSE 0 END)
  FROM employees
 GROUP BY deptno;

仅供参考,Oracle没有DATEADD()功能,也没有GETDATE()功能。请注意,我使用ADD_MONTHS()SYSDATE(您也可以使用CURRENT_DATE)代替这些。

答案 1 :(得分:1)

为什么不改变where的方向?

SELECT sum(msal)
FROM employees
WHERE hiredate <= DATEADD(year, -1, GETDATE())
GROUP BY deptno;

此外,通常当您按字段聚合时,字段(deptno)将包含在select子句中。