2017-12-05 17 views
0

は、私はそれらの和の違いを計算したい2つのテーブルを、持っていると言う:Oracle sql - 2つの異なるテーブルから2つの合計の差を選択しますか?

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

あなたは 'sum(salary)'で何のことを言っていますか? 'id'は各テーブルのプライマリキー(おそらく従業員ID)ですので、各テーブルの従業員ごとに給与が1つしかありません。 – 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

改訂された質問がうまくいって、私が望んだ正確な結果が得られました。私はあなたが2番目の合体引数で "、0"を忘れたと思うが。ありがとうございました。 – Joesph

+0

私は分かりません。 IDが主キーの場合、IDによるGROUPINGの意味は何ですか? – mathguy

関連する問題