2017-12-05 1 views
0

내가 그 합 차이를 계산하려는 두 개의 테이블을 가지고 말 :Oracle sql - 두 개의 다른 테이블에서 두 합계의 차이를 선택 하시겠습니까?

company1(
id INTEGER, 
salary INTEGER 
) 

company2(
id INTEGER, 
salary INTEGER 
) 

어떻게 하나의 선택 쿼리를 사용하여 직원의 각각에서 자신의 SUM (급여)의 차이를 선택할 수 있습니다? 당신은 select에서이 작업을 수행 할 수 있습니다

company1 
id salary 
1 40000 
2 20000 
3 50000 

company2 
id salary 
1 30000 
2 15000 
3 25000 

end result differences: 
id 
1 10000 
2 5000 
3 25000 
+0

'합계 (salary) '란 무엇입니까? 'id'는 각 테이블의 기본 키 (아마도 직원 ID)이므로 각 테이블의 각 직원마다 단 하나의 급여 만 있습니다. 그래서 ** 총 **에 대해 이야기하고 있습니까? – mathguy

답변

2

: 같은

SELECT 
(SELECT SUM(company1.salary) FROM company1 GROUP BY id) - (SELECT SUM(company2.salary) FROM company2 GROUP BY id) as diff_between_pay 

최종 결과는 다음과 같습니다 예를 들어

수정 된 질문에 대해

select (select sum(salary) from company1) - (select sum(salary) from company2) as diff_between_pay 
from dual; 

사용합니다 full join :

select (coalesce(c1.sums, 0) - coalesce(c2.sums, 0)) as diff_between_pay 
from (select id, sum(salary) as sums 
     from company1 
     group by id 
    ) c1 full join 
    (select id, sum(salary) as sums 
     from company2 
     group by id 
    ) c2 
    on c1.id = c2.id; 
+0

사과, 나는 여전히 내 질문을 편집하고 있었다. 나는 중요한 부분을 버렸다. 각 회사의 합계가 GROUPED BY ID라면 어떻게 될까요? 단일 행 대신 각 합계에서 여러 행이 있음을 의미합니다. – Joesph

+0

개정 된 질문이 해결되어 내가 원하는 정확한 결과를 얻었습니다. 나는 두 번째 결합 인수에서 ", 0"을 잊었다 고 생각합니다. 고맙습니다. – Joesph

+0

나는 이해하지 못한다. ID가 기본 키인 경우 ID 별 GROUPING의 의미는 무엇입니까? – mathguy

관련 문제