我正在学习Oracle性能调优,并且对调优查询不太好。任何帮助下面的问题,将不胜感激。提前致谢。在执行汇总时处理外键中的重复数据
我有两个表:
员工:
empno deptno sal
1 10 800
1 20 800 (Employee 1 works in multiple departments)
2 10 1000
3 30 1200
部:
Department_id department_name
10 Finance
20 HR
30 MANAGER
现在我想找到每个部门支付的薪金总额。我写了下面的查询,它给出了我需要的结果,但我不确定这个查询在表中可能会有更好的表现,我们可能有数百万条记录和大量重复。
With t as
(
select
empno, department_id, sal
from
emp e
join
departments d on e.deptno = d.department_id
order by
empno),
t1 as
(
select
empno, max(sal)/count(1) salary
from
t
group by
empno)
select
department_id, sum(salary)
from
t
join
t1 on t.empno = t1.empno
group by
department_id;
对于没有使用唯一密钥和PK的员工中的15条记录,查询花费了0.059秒。
感谢
这会给出错误的结果,因为即使员工1同时为2个部门工作,但他仅由两个部门支付800而不是800支付。 – user7571721
@ user7571721。好。你如何确定哪个部门支付给定员工的工资1.例如,员工1是由部门10还是20支付的? – BobC
说这两个支付一半或只有10个支付..请你帮我解决这两个问题。我只能找出一个查询......当只有10个支付时,不知道如何编写查询。 – user7571721