2011-09-15 1 views
6

Iは、2つのテーブルを有する:MySQLの複数のテーブル間で列を合計するにはどうすればよいですか? MySQLでは

Table MC: 
---------------- 
|TransNo | Qty | 
|--------|-----| 
| xxx1 | 4 | 
| xxx3 | 3 | 

Table Amex: 
---------------- 
|TransNo | Qty | 
|---------|-----| 
| xxx1 | 2 | 
| xxx5 | 1 | 

をIテーブルMCからQtyカラム(式7)とテーブルAmex(式3)を合計し、その結果を持っている必要が合計数量として。

私は

SELECT (SUM(amex.Qty) + SUM(mc.Qty)) as total_qty from amex, mc 

を行うと、私はデカルト積(20)を得るが、私は必要な正しい答えは、私が正しい結果を得るために、このクエリを変更する必要がありますどのように10のですか?

答えて

11
SELECT SUM(t.Qty) AS total_qty 
    FROM (SELECT Qty FROM MC 
      UNION ALL 
      SELECT Qty FROM Amex) t 
+0

私は列の1にして、グループをやってみたかった場合どちらのテーブルにも共通していますが、どうすればいいですか? – Siva

0
SELECT SUM(Qty) AS total_qty FROM (SELECT Qty FROM amex UNION SELECT Qty FROM mc); 
+2

ここで 'UNION ALL'を使う必要があるのは、' UNION'が重複する値を削除するためです。 –

2

あなたは(効率性の理由から、おそらく)ALL組合や組合の使用を避けたい場合は、次の作品:

SELECT (1.Qty+2.Qty) AS total_qty FROM (SELECT SUM(Qty) Qty FROM MC) 1, 
(SELECT SUM(Qty) Qty FROM Amex) 2; 

は、ここでは、このアウトを拡張したい場合のための例ですグループ化条件を含めることができます。 MCとAmexの両方にCust_IDを設定して各注文を行った顧客を特定し、各顧客の合計を知りたいとします。コードは次のようになります。Customerテーブルがデータベースに存在する

SELECT COALESCE(1.Cust_ID, 2.Cust_ID) Cust_ID, (1.Qty+2.Qty) AS total_qty 
FROM (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1 
FULL OUTER JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 1.Cust_ID = 2.Cust_ID; 

なら、これはのように簡略化することができます。

SELECT c.Cust_ID, (1.Qty+2.Qty) AS total_qty FROM Customer c 
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1 ON 1.Cust_ID = c.Cust_ID 
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 2.Cust_ID = c.Cust_ID; 
関連する問題