对于问题案例:已经有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
);
总结:在分析的有的问题时,我们应该要善于从问题的本质出发,先确定需要获得什么,如何获得,获得的是不是我们要的,如果不是如何剔除多余的数据,以一种逐层剔除的思想,层层向里看问题,层层向外解问题,问题自然迎刃而解!