2015-12-29 54 views
0

我有兩個表,我需要連接並獲得每個表中一列的SUM()。從兩個表連接兩列的MySQL SUM()

mysql> select * from day_sales2; 
    +--------+------------+ 
    | id  | ds_oversht | 
    +--------+------------+ 
    | 119263 |  -0.17 | 
    | 119336 |  0.55 | 
    | 119409 |  3.08 | 
    | 119482 |  -33.25 | 
    | 119555 |  1.27 | 
    | 119628 |  0.32 | 
    | 119701 |  -0.15 | 
    | 119774 |  6.57 | 
    | 119847 |  -0.06 | 
    | 119920 |  -12.04 | 
    | 119993 |  -12.40 | 
    | 120066 |  -38.90 | 
    | 120139 |  20.56 | 
    | 120212 |  -17.11 | 
    | 120285 |  -0.51 | 
    | 120358 |  0.04 | 
    | 120431 |  3.23 | 
    | 120504 |  -0.89 | 
    | 120577 |  2.13 | 
    | 120650 |  0.57 | 
    | 120723 |  -1.15 | 
    | 120796 |  1.99 | 
    | 120869 |  9.29 | 
    | 120942 |  6.95 | 
    | 121015 |  3.22 | 
    | 121088 |  -0.59 | 
    | 121161 |  -0.89 | 
    | 121234 |  -1.00 | 
    +--------+------------+ 

    mysql> select * from over_short_adj2; 
    +-------+---------+-----------+ 
    | id | main_id | cd_amount | 
    +-------+---------+-----------+ 
    | 45881 | 119920 |  0.66 | 
    | 45882 | 119920 |  1.19 | 
    | 45907 | 119920 |  4.81 | 
    | 46017 | 120212 |  3.35 | 
    | 46018 | 120066 |  16.85 | 
    +-------+---------+-----------+ 

我使用這個查詢來弄完:

SELECT SUM(t1.ds_oversht) sum1, SUM(t2.cd_amount) sum2 
    FROM day_sales2 t1 
    LEFT JOIN over_short_adj2 t2 ON t1.id = t2.main_id 

但SUM1不正確,因爲聯接是一對多。我怎麼能得到這個查詢工作?

+0

你是什麼意思buy'sum1'不正確? –

+0

+ -------- + ------- + \t \t | sum1 | sum2 | \t \t + -------- + ------- + \t \t | -83.42 | 26.86 | \t \t + -------- + ------- + sum1是-83.42但它應該是-59.34 – user1529918

回答

1

你應該得到的第一個day_sales2SUMLEFT JOIN前:

SELECT 
    t1.id, 
    t1.sum1, 
    SUM(t2.cd_amount) AS sum2 
FROM (
    SELECT id, SUM(ds_oversht) AS sum1 
    FROM day_sales2 
    GROUP BY id 
) t1 
LEFT JOIN over_short_adj2 t2 
    ON t1.id = t2.main_id 
GROUP BY t1.id, t1.sum1 

編輯:

如果你只想要一個行,我覺得不需要JOIN

SELECT 
    (SELECT SUM(ds_oversht) FROM day_sales2), 
    (SELECT SUM(cd_amount) FROM over_short_adj2) 
+0

查詢應該只返回一行總和。 – user1529918

+0

@ user1529918,看我的編輯。 –

1

如果你只想從兩個表中獲得一行總和,你可以使用UNION

SELECT SUM(ds_oversht) from day_sales2 
UNION 
SELECT SUM(cd_amount) from over_short_adj2; 
+0

這肯定不會工作 – user1529918

+0

嗯,或將它,有趣 – user1529918

0
SELECT SUM(sum1) sum1, SUM(sum2) sum2 FROM (
    SELECT 
     t1.id, 
     t1.sum1, 
     SUM(t2.cd_amount) sum2 
    FROM (
     SELECT id, SUM(ds_oversht) sum1 
     FROM day_sales2 
     GROUP BY id 
    ) t1 
    LEFT JOIN over_short_adj2 t2 
     ON t1.id = t2.main_id 
    GROUP BY t1.id, t1.sum1 
    ) t3 

這確實它,謝謝費利克斯的答案。

+0

請參閱我編輯的答案。它更高效,更簡單。 –

+0

但加入需要的,因爲還有更多的是查詢 – user1529918

+0

'選擇ds_per,SUM(SUM1)SUM1,SUM(SUM2)SUM2 FROM( \t \t選擇 \t \t \t t1.id, t1.ds_per, T1 .ds_sto, \t \t \t t1.sum1, \t \t \t SUM(t2.cd_amount)SUM2 \t \t FROM( \t \t \t SELECT標識,ds_per,ds_sto,ds_date,SUM(ds_ov ersht)SUM1 \t \t \t FROM day_sales \t \t \t GROUP BY ID \t \t)T1 \t \t LEFT JOIN over_short_adj T2 \t \t \t ON t1.id = t2.main_id \t \t \t WHERE t1.ds_sto = 6 AND t1。ds_date BETWEEN '2014年12月29日' 和 '2015年12月27日' \t \t GROUP BY t1.id,t1.sum1 \t \t)T3 GROUP BY ds_sto,ds_per'這是一個完整的查詢,偉大工程 – user1529918