PostgreSQL で作業しているにもかかわらず、この select が Oracle で機能しないのはなぜですか (3 番目の合計は、次のように同じである必要があります: select sum(salary) from employees) ?:
select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
sum(e2.salary), sum(e3.salary)
from employees e1, employees e2, employees e3
where e1.department_id=e2.department_id
group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary
order by 1,2;
PostgreSQL では動作しますが、ここでは動作しません。Oracle では、制約なしで 1 つのコピー e2 のみが機能します (e1 が元のテーブルであり、その主キーによってグループ化されている場合)。
select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
sum(e2.salary)
from employees e1, employees e2
where e1.department_id=e2.department_id
group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary
order by 1,2;
または、最初のテーブルの各レコードの合計がどこになくても (ここでは制約なし):
select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
sum(e2.salary)
from employees e1, employees e2
group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary
order by 1,2;
もちろん、次のような他の代替選択を知っています。
select employee_id, department_id, manager_id, salary,
sum(salary) over (partition by department_id) as suma,
sum(salary) over ()
from employees order by 2,3;
またはサブセレクトを使用:
select employee_id, department_id, manager_id, salary,
(select sum(e2.salary) from employees e2
where e2.department_id=e1.department_id) as suma1,
(select sum(e2.salary) from employees e2) as suma2
from employees e1 order by 1,2;
Oracle で複数のテーブルをコピーする方法を知っていますか?