[英]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.