- 论坛徽章:
- 0
|
回复 1楼 soccer 的帖子
-- 使用SAMPLE数据库的EMPLOYEE表作示例
-- 创建视图,简化SQL
create view emp as
(
select empno, salary, workdept
from employee
) ;
-- 第一个SQL最常见的方式,将平均制作个临时表
with avg(dept, avgsa) as
(
select workdept,avg(salary)
from employee
group by workdept
)
select empno, salary, firstnme
from employee e , avg a
where e.salary > a.avgsa and e.workdept = a.dept ;
-- 第二个SQL, 使用OLAP分析
with avg as
(
select empno, salary, firstnme, avg(salary) over(partition by workdept) avgsa
from employee
)
select *
from avg
where salary > avgsa ;
-- 第三个SQL, 前面的示例方式
select *
from emp a
where a.salary >
(
select avg(b.salary) from emp b
where b.workdept = a.workdept
group by workdept
) ;
Summary of Results
==================
Elapsed Agent CPU Rows Rows
Statement # Time (s) Time (s) Fetched Printed
1 0.000 Not Collected 16 16
2 0.125 Not Collected 16 16
3 0.031 Not Collected 16 16
看来第一个的效率比较高 |
|