2017-05-13 9 views
2

私は私の質問は、私は135 する3つの表に3 coumns(内と外とワット)を合計する照会し、私はこれらのコードユニオンクエリを使用して3つの異なるテーブルの3つの列を合計しますか?

enter image description here

select sum(x.aa) from(
    SELECT SUM(t1.in)AS aa FROM t1 

    union all 
     SELECT SUM(t2.out) AS aa FROM t2 


union all 
     SELECT SUM(t3.w) AS aa FROM t3 
    ) as x 
group by x.aa 
を使いたいれる テーブルt1とt2とt3を持っています
+0

実際の質問は何ですか?なぜあなたはクエリの最後に 'GROUP BY'を使用していますか? –

+0

私は135 –

答えて

1

あなたは1行の合計をしたい場合は、最も簡単な方法は、union allを不要にする、おそらくです:

SELECT (SELECT SUM(t1.in) FROM t1) as sum_in, 
     (SELECT SUM(t2.out) FROM t2) as sum_out, 
     (SELECT SUM(t3.w) AS aa FROM t3) as sum_w; 
+0

良いことに3つの表に3(内と外とワット)coumnsを合計するクエリが、私は1つの列のヌル>>>結果を持っている場合はnull欲しいです? –

+0

@ m.mahmoud。 。 。いいえ、集計関数は 'NULL'値を無視します。 –

+0

私はこれらのコードを試して、私にnulle結果を与えます –

2

私はあなたがさえを使用する必要はないと思いますはこちら。あなただけの各テーブルの合計のための3つのサブクエリを一緒にまとめることができます。

SELECT 
    (SELECT SUM(t1.in) FROM t1) + 
    (SELECT SUM(t2.out) FROM t2) + 
    (SELECT SUM(t3.w) FROM t3) AS the_sum; 

ヌルが上記の3つの和のそれぞれには問題にはならないのでSUM()機能は、NULL値を無視します。しかし、合計の語がNULLである場合、用語全体はNULLになります。これを回避する1つの方法は、COALESCE()を使用することです。

SELECT 
    (SELECT COALESCE(SUM(t1.in), 0) FROM t1) + 
    (SELECT COALESCE(SUM(t2.out), 0) FROM t2) + 
    (SELECT COALESCE(SUM(t3.w), 0) FROM t3) AS the_sum; 
+0

良いですが、私は1つの列を持っている場合>>>結果はnullになる???良い –

+0

しかし、私が同じ値 –

+0

を持つ3つのテーブルで葯の列を選択している場合、私は、この新しい要件を理解していません。あなたは精緻化できますか? –

関連する問題