题解 | #汇总各个部门当前员工的title类型的分配数目#

汇总各个部门当前员工的title类型的分配数目

http://www.nowcoder.com/practice/4bcb6a7d3e39423291d2f7bdbbff87f8

老规矩,在看到题目的时候,我们先想办法把题目拆解成简单的问题:
1、先查找每个员工对应的部门编号及部门名称
2、查找每一个部门的职称类型
3、计算出每个部门每种职称的数量
上述的步骤,也许看起来有些繁琐,但这是为了让大家看得更加明白。
废话不多说,直接上代码分析:
首先,参考题目,我在数据库中构造了三张表
部门表
部门表

员工表
图片说明

职称表
图片说明
有了这三张表,我们来开始解决第一个小问题:
1、查找每个员工对应的部门编号及部门名称
联系 departments表 和 dept_emp表 我们即可得到相应的数据:

select e.emp_no,d.dept_no,d.dept_name from dept_emp e JOIN departments d on e.dept_no = d.dept_no;

查询结果如下:
我们暂且称之为 t1表
图片说明
2、查找每一个部门的职称类型

select t1.dept_no,t1.dept_name,t2.title from 
(select e.emp_no,d.dept_no,d.dept_name from dept_emp e JOIN departments d on e.dept_no = d.dept_no) t1 
JOIN titles t2
on t1.emp_no = t2.emp_no  ORDER BY t1.dept_no;

解释:t1 即为我们第一个小问题中查询得到的数据,将其看成一个临时表。要得到职称,就必须查询titles表。联系 t1 表 和 titles 表 即可得到问题的结果。
查询结果如下:
部门的职称
图片说明
这里,我们暂时还未对职称进行归类。如表中 d001部门出现了两个职称名为 staff 的数据
因此,我们要进行归类,合并查询结果,这也是第三个小问题,即题目最终的要求。

select t1.dept_no,t1.dept_name,t2.title,COUNT(t2.title) count from (select e.emp_no,d.dept_no,d.dept_name from dept_emp e JOIN departments d on e.dept_no = d.dept_no) t1 
JOIN titles t2
on t1.emp_no = t2.emp_no  GROUP BY t1.dept_no,t2.title ORDER BY t1.dept_no;

解释:在上述代码的最后,我们对数据按部门以及职称进行分组
注意,这里必须是部门和职称同时分组,否则结果不正确。
查询结果:
最终结果
图片说明
总结:对于这类题目,大都是几张表的联合查询,也这几张表不一定就是题目所给的数据表,也有可能是我们在查询过程中产生的数据表。因此,我们要学会如何去拆解题目,得到我们想要的临时表,再利用临时表,来查询获得我们想要的数据。
补充说明:在查询过程中,我的代码中并未加入 where to_date = '9999-01-01'这个条件语句,大家也可以自己加上,虽然测试的时候,没有加上这个条件也能通过。
最后,如果我的表述中有错误的地方,欢迎大家指正!谢谢!祝大家刷题愉快!

全部评论

相关推荐

smile丶snow:项目完成时间要写一个大概的区间,自己顺延一下就行。感觉ai对话的放第一个比较好。可以自己编一些场景或者找ai编一个场景。就是你为什么要写这个仿DeepSeek对话应用。比如你自己有很多文档,这个ai可以基于你自己的文档回答之类的。个人建议~具体看你自己。 还有项目中用到那些更好让ai coding的方法也可以写一下,毕竟现在ai大跃进…
简历被挂麻了,求建议
点赞 评论 收藏
分享
04-08 23:37
已编辑
东华大学 结构工程师
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务