一个SQL实现薪水大于所在部门平均薪水的员工
2012-05-10 21:22
387 查看
id empName DeptId empSalary
1 张三 1 2500
2 李四 1 2400
3 王二 2 2600
4 麻子 2 2500
select * from emp e1 where e1.empSalary > (select avg(empSalary) from emp e2 where e1.DeptId = e2.DeptId)
查询结果:
1 张三 1 2500
3 王二 2 2600
补充:
今天在跟同事交流的时候,发现昨天少考虑了一样东西,性能。
这个问题还有一种解决方式,SQL如下:
select e1.*
from emp e1 ,(select DeptId,avg(empSalary) as deptSalary from emp group by DeptId) as e2
where e1.DeptId = e2.DeptId and e1.empSalary > e2.deptSalary(测试通过)
现在来分析这两种写法的差别在哪。第一种写法看似更简捷,语句少了不少,第二种似乎更麻烦。其实不然,第一种写法是比第二种效率更低,为什么。原因就在于
emp中员工每次比较薪水时,都会计算一次该员工所属部门的平均薪水,这样emp中有4条记录,就会计算4次。而第二种方式只计算一次部门的评价薪水。如
果表中数据量比较大,对性能的影响会更明显,所以第二种方式更佳。
1 张三 1 2500
2 李四 1 2400
3 王二 2 2600
4 麻子 2 2500
select * from emp e1 where e1.empSalary > (select avg(empSalary) from emp e2 where e1.DeptId = e2.DeptId)
查询结果:
1 张三 1 2500
3 王二 2 2600
补充:
今天在跟同事交流的时候,发现昨天少考虑了一样东西,性能。
这个问题还有一种解决方式,SQL如下:
select e1.*
from emp e1 ,(select DeptId,avg(empSalary) as deptSalary from emp group by DeptId) as e2
where e1.DeptId = e2.DeptId and e1.empSalary > e2.deptSalary(测试通过)
现在来分析这两种写法的差别在哪。第一种写法看似更简捷,语句少了不少,第二种似乎更麻烦。其实不然,第一种写法是比第二种效率更低,为什么。原因就在于
emp中员工每次比较薪水时,都会计算一次该员工所属部门的平均薪水,这样emp中有4条记录,就会计算4次。而第二种方式只计算一次部门的评价薪水。如
果表中数据量比较大,对性能的影响会更明显,所以第二种方式更佳。
相关文章推荐
- 一个SQL实现薪水大于所在部门平均薪水的员工
- [数据库]关于三个比较典型的数据库试题(1.找到员工表中工资最高的前三名;2.找到员工表中薪水大于本部门平均薪水的员工;3.统计每年入职的员工个数)
- oracle--查询本部门薪水大于平均工资的员工
- 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
- 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
- 查看部门里工资大于平均水平的员工信息,并按部门分组
- 一句sql 在所有部门中选择平均工资最高的部门所有员工
- 将110号员工的工资修改为其所在部门的平均工资多100元
- 查询各个员工的员工号,员工名及其所在部门的平均工资
- 一个SQL题目,求各部门中薪水最高的员工的名称
- 一条SQL语句实现查询每个部门中年龄最大的员工信息
- 一个sql语句的编写 写出不及格门数大于等于2的学生的姓名和平均成绩
- 讨论记录:求大于一个时间段的最大平均积分,O(n)时间实现
- SQL查询--列出至少有一个员工的部门
- 用一个SQL语句选出每个部门工资最高的员工
- 创建存储过程,以部门编号为参数返回该部门的人数及平均工资(返回一个值可以通过函数来实现,但如果要返回多个值,需要使用out或in out模式参数实现)
- 列出薪金高于公司平均薪金所有员工,所在部门,上级领导,公司的工资等级
- 找出那些工资高于他们所在部门的平均工资的员工
- 【SQL】求得工资在部门平均工资之上得员工
- .使用面向对象思想,输出员工信息并计算员工的工资。实现过程为:定义一个部门(Department)类,该类有部门编号(Id)、部门名称(Name)属性; 再定义一个员工(Employee)类,该类的属