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

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

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

这题主要还是考察表的连接,以及 group by 的使用。

先贴一下结果

select dp.dept_no, dp.dept_name, t.title, count(t.title)
from dept_emp de inner join titles t
on de.emp_no = t.emp_no
and de.to_date = '9999-01-01' and t.to_date = '9999-01-01'
inner join departments dp
on dp.dept_no = de.dept_no
group by dp.dept_no, t.title
order by dept_no

思路:

  1. 首先我们先使用 inner join 连接 dept_emp 和 titles 表,找出当前员工的头衔(title)
select de.emp_no, t.title, de.dept_no
from dept_emp de, titles t
where de.emp_no = t.emp_no
and de.to_date = '9999-01-01' and t.to_date = '9999-01-01'
  1. 然后我们再使用 inner join 将上面的虚拟表与 departments 表进行连接
select de.emp_no, t.title, de.dept_no
from dept_emp de inner join titles t
on de.emp_no = t.emp_no
and de.to_date = '9999-01-01' and t.to_date = '9999-01-01'
inner join departments dp
on dp.dept_no = de.dept_no
  1. 我们使用 group by 将 dept_no 与 title 进行分组
select dp.dept_no, dp.dept_name, t.title, count(t.title)
from dept_emp de inner join titles t
on de.emp_no = t.emp_no
and de.to_date = '9999-01-01' and t.to_date = '9999-01-01'
inner join departments dp
on dp.dept_no = de.dept_no
group by dp.dept_no, t.title
  1. 最后我们使用 order by 对 dept_no 进行排序
select dp.dept_no, dp.dept_name, t.title, count(t.title)
from dept_emp de inner join titles t
on de.emp_no = t.emp_no
and de.to_date = '9999-01-01' and t.to_date = '9999-01-01'
inner join departments dp
on dp.dept_no = de.dept_no
group by dp.dept_no, t.title
order by dept_no

这里我们需要了解 GROUP BY X,Y 这种分组方式

GROUP BY X,Y 的意思是将所有具有相同的 X 字段值和 Y 字段值的记录放到一个分组里。

所以在结果中大家可以看到 dept_no 列中有多个 d001,这是因为虽然它们的 dept_no 相同,但是它们的 title 不同,故此没有分到一个组内

SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务