题目描述:汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count,结果按照dept_no升序排序。

最开始是想用窗口函数来解决:

select d.dept_no,
       d.dept_name,
       t.title,
       count(distinct title) over(partition by dept_no,title) 
from departments d join dept_emp de on d.dept_no=de.dept_no
                   join titles t    on de.emp_no=t.emp_no
where de.to_date="9999-01-01"
  and t.to_date="9999-01-01"
order by dept_no

但是实际使用时才发现count()窗口函数不支持distinct。那么这里换成group by分组也是一样。既然需要显示每个部门里面每个职位对应的数量,那么按dept_no,title分组就好了。

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