對於問題案例:已經有DEPARTMENT,EMPLOYEE兩張表,並EMPLOYEE表中的E_DID是外鍵且引用於DEPARTMENT表中,現有個問題:你如何查詢出部門人數在10人以上的部門,只需要查詢對應的ID,和部門名稱即可?
問題分析:我們分析此類問題以一種從裏向外處理問題的思路,逐層剔除冗餘數據,便可以得到我們的結果!
step1:首先需要對員工表進行分類彙總,以便統計出人數:
sql code: SELECT e.E_DID,COUNT(e.E_DID) AS total
FROM [EMPLOYEE] as e
GROUP BY e.E_DID
//請注意Group by 子名存在的必要性
step2: 聰明你也許已經發現上面將返回的並不是我們所需要的部門ID的集合,且還沒有過濾掉我們不需要的數據,請注意:逐層剔除,各層只完成它有限的能力,注意控制各層的能力。下面要做的就是剔除冗餘數據(上面黑色標記的列),並獲得我們的部門ID的集合
sql code: SELECT e1.E_DID FROM(
SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
GROUP BY e.E_DID
) AS e1
WHERE e1.total>=10
step3:終於可以到收工的時候了,一舉將我們需要的數據拿下來吧!想必你是迫不急待了吧!
sql code: SELECT d.* FROM DEPARTMENT AS d
SELECT e1.E_DID FROM(
SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
GROUP BY e.E_DID
) AS e1
WHERE e1.total>=10
);
總結:在分析的有的問題時,我們應該要善於從問題的本質出發,先確定需要獲得什麼,如何獲得,獲得的是不是我們要的,如果不是如何剔除多餘的數據,以一種逐層剔除的思想,層層向裏看問題,層層向外解問題,問題自然迎刃而解!