在ViewALL视图中,按部门统计各部门人数及平均年龄,包括部门名称、人数和平均年龄。
对于该问题,可以按照以下步骤进行优化:
1.在view_info视图的基础上,使用group by对部门进行分组,并统计人数和平均年龄,得到一个新的视图view_dept:
create view view_dept as
select wsn as dept_name, count(*) as num_people, avg(age) as avg_age
from (
select wk.name, wk.age, ws.name as wsn
from zhongjinlin_worker wk
right join zhongjinlin_workshop ws on
wk.shop_no = ws.no
) info
group by wsn;
其中,age是员工的年龄,需要在原view_info中进行修改。
2.在view_dept视图基础上,使用join与原来的view_info视图进行联接,得到最终的视图view_all:
create view view_all as
select di.dept_name, di.num_people, di.avg_age, vi.name, vi.phone, vi.address, vi.wsp as director_name, vi.wsp as director_phone
from view_dept di
left join (
select wk.name, wk.age, wk.phone, ws.address, ws.name wsn, ws.phone wsp
from zhongjinlin_worker wk
right join zhongjinlin_workshop ws on
wk.shop_no = ws.no
) vi on di.dept_name=vi.wsn;
其中,使用left join而不是inner join,是因为有可能存在一个部门没有员工的情况,使用left join可以将这个部门的信息也包括在内。
整个优化过程中,需要进行适当的修改和调整,比如涉及到具体表的名称、字段的名称和数据类型等。