一个老SQL问题:两种SQL哪个更优

[复制链接]
查看11 | 回复2 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
还是HR schema下的两个表:employees和departments,现要查询每个部门中工资比平均工资高的那个人的姓名,工资和email
两种写法哪一个更优呢?
写法一:
select e.last_name,e.salary,e.email
from employees e,

(select department_id,avg(salary) avsal from employees group by department_id) d
where e.department_id=d.department_id and

e.salary>d.avsal;
写法二:
select last_name,salary,email
from employees outer
where salary>

(select avg(salary) from employees

where department_id=outer.department_id

group by department_id

);

请大侠们留下自己的详细分析作以讨论,谢谢!

回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层

连下面的语句一起测试、 ,执行计划和统计数据即可
selectlast_name,

salary,

email
from
(
selectlast_name,

salary,

email,

avg(salary) over(partition by department_id) avg_sal
from employees
)
where salary > avg_sal;


回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
两种方法都不怎么样,最好是用分析函数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行