首页 > 其他 > 详细

动力节点试题练习26题

时间:2019-05-29 23:09:30      阅读:145      评论:0      收藏:0      [点我收藏+]

26.列出在每个部门工作的员工数量、平均工资和平均服务期限

1 select 
2 e.deptno,
3 count(e.ename)as"员工数量", 
4 avg(e.sal) as avgsal,
5 ((avg(to_days(now())-to_days(e.hiredate)))/365)
6 from emp e
7 group by deptno

 

以上为错误解法
---------------------------------------------------------------------------
第一步 求出每个部门对应的所有员工,这里使用了右连接,保证显示所有的部门,但是有的部门不存在员工,但是也必须把所有的部门显示出来,将员工表与部门表进行右连接,将信息全部显示

select 
e.*,d.*
from 
emp e
right join 
dept d
on e.deptno=d.deptno;

 

第二步 在此基础上列出每个部门工作的员工数量

select 
d.deptno,count(e.ename)
from 
emp e
right join 
dept d
on e.deptno=d.deptno
group by 
d.deptno;

 


第三步,在以上基础上,列出每个员工的平均工资

select 
d.deptno,count(e.ename),ifnull(avg(e.sal),0)as avgsal
from 
emp e
right join 
dept d
on e.deptno=d.deptno
group by 
d.deptno;

 

第四步,在以上基础上,列出没个员工的平均服务期限
1)to_days()函数,计算出天数

select to_days(now());

 


换算为年数

select to_days(now())/365

 


2)计算员工在公司的服务期限

select (to_days(now())-to_days(hiredate))/365 as servertime
from emp;

 


整体语句

select 
d.deptno,
count(e.ename) as totalemp,
ifnull(avg(e.sal),0)as avgsal,
avg(ifnull((to_days(now())-to_days(hiredate))/365,0)) as avgservertime
from 
emp e
right join 
dept d
on e.deptno=d.deptno
group by 
d.deptno;

 

动力节点试题练习26题

原文:https://www.cnblogs.com/lsswudi/p/10946864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!