2017-03-08 38 views
0

我有一個非常簡單的問題,我正在努力解決,但無法繞過它。在三個mysql表中爲員工加起來的價值

我有相同的結構

t1.id, t1.cust_id, t1.name, t1.value 
t2.id, t2.cust_id, t2.name, t2.value 
t3.id, t3.cust_id, t3.name, t3.value 

客戶出現在某些表,但不是在其他的三個表;每個「價值」記錄都是美元數量。

我想在mySQL中運行一個查詢,生成一個總和表,將三個表中每個客戶所做的所有購買加起來。

我期望的輸出會看起來像:

Name  Customer ID  T1  T2 T3 

    Joe   88888  12.45 45.90 2.34 
    Ted   99999   8.90 3.45 null 
    Sue   12123   9.45 2.45 null 

我已經嘗試了一些查詢連接,但沒有令人滿意的結果。

感謝您的幫助!

回答

1

使用union all來組合3個表中的行,然後使用聚合。

select cust_id,name,sum(t1val),sum(t2val),sum(t3val) 
from (
select id, cust_id, name, value as t1val, null as t2val, null as t3val from t1 
union all 
select id, cust_id, name, null, value, null from t2 
union all 
select id, cust_id, name, null, null ,value from t3 
) t 
group by cust_id,name 
+0

不錯!謝謝,這似乎運作良好。 – tomish

0

你可以用SELECT做到這一點,例如:

SELECT (
     (SELECT COALESCE(SUM(value),0) FROM t1 WHERE cust_id = 100) 
     + 
     (SELECT COALESCE(SUM(value),0) FROM t2 WHERE cust_id = 100) 
     + 
     (SELECT COALESCE(SUM(value),0) FROM t3 WHERE cust_id = 100) 
    ) as total; 

這裏的SQL Fiddle

+0

感謝您的答覆,但我將不得不用實際的客戶ID替換問號,對嗎?我想這可能是對錶1 2和3的子查詢? – tomish

+0

@tomish我已經用示例更新了查詢。是的,我們需要把客戶ID,這些是簡單的選擇查詢,而不是子查詢。 –

+0

謝謝Darshan! – tomish