簡體   English   中英

減去多行查詢

[英]Subtracting multi-row queries

我正在嘗試編寫一個sql查詢來找出由於新員工而導致每個部門的工資在去年增加了多少。

表結構為員工(empno,deptno,msal,hiratedate)

我可以弄清楚如何按部門索取全部工資

SELECT sum(msal) FROM employees GROUP BY deptno;

以及如何從過去一年中雇用的人那里獲得薪水

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

但是無論我以什么方式嘗試減去這兩個查詢的結果,我只會得到錯誤。

這是您可能會做的。 在這種情況下,我使用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 )來代替它們。

為什么不改變方向where

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

同樣,通常,當您按字段進行聚合時,該字段( deptno )會包含在select子句中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM