2017-08-24 268 views
0

我想寫4連接JOIN查詢表。我需要查詢來返回客戶獲得的總利潤。在表格結構下面添加所需的結果。在系統MySQL連接查詢和總和記錄

--------------------- 
| ID | user_id | 
--------------------- 
| 1  | 1001 | 
| 2  | 1002 | 
| 3  | 1003 | 
| 4  | 1004 | 
--------------------- 

manager_client

此表中的所有用戶的

user_profile

細節是使用的情況下他/她

---------------------------- 
|manager_id | client_id | 
---------------------------- 
| 1001  | 1002  | 
| 1001  | 1003  | 
| 1001  | 1004  | 
---------------------------- 
經理和客戶端之間的區別

client_trans

這個錶店有關事務的信息由客戶端基於login_id

--------------------------- 
|user_id | login_id | 
--------------------------- 
| 1002 | 1   | 
| 1002 | 2   | 
| 1002 | 3   | 
--------------------------- 

trans_history執行

基於login_id有關客戶的利潤該表存儲信息,不同login_id會產生不同的利潤

----------------------- 
|login_id | profit | 
----------------------- 
| 1002 | 10  | 
| 1002 | 20  | 
| 1002 | 30  | 
----------------------- 

- 這是預期的結果看起來像

---------------------------------- 
| user_id | profit    | 
---------------------------------- 
| 1001 | totalprofitallclient | 
---------------------------------- 
+2

見https://meta.stackoverflow.com/questions/333952/why-應該我提供了一個mcve爲什麼似乎對我來說是一個非常簡單的sql查詢 – Strawberry

+1

歡迎來到堆棧溢出!純粹的代碼寫入請求在Stack Overflow上是無關緊要的 - 我們希望這裏的問題與特定的編程問題有關 - 但我們會很樂意幫助您自己編寫代碼!告訴我們[您嘗試過的](https://stackoverflow.com/help/how-to-ask),以及您卡在哪裏。這也將幫助我們更好地回答你的問題。 – WhatsThePoint

回答

0
SELECT u.user_id SUM(t.profit) 
FROM user_profile u NATURAL JOIN client_trans c NATURAL JOIN trans_history t 
GROUP BY u.user_id 

我不明白爲什麼需要4臺。

解釋:自然地加入所有表(意思是,例如,user_profile將通過'user_id'列與client_trans結合。) 然後使用相同的user_id對所有事務進行分組。 最後加起來所有的利潤。

編輯:如果USER_ID在client_trans實際上意味着master_id,那麼你就必須改變語句如下:

SELECT u.user_id SUM(t.profit) 
FROM user_profile u JOIN manager_client m ON u.user_id = m.client_id JOIN client_trans c ON m.master_id = c.user_id NATURAL JOIN trans_history t 
GROUP BY u.user_id 
+1

如果你不關心沒有利潤的用戶,你甚至不需要表user_profile。 – Pharaoh

+0

@Pharaoh哦,對,謝謝。只是盲目地試圖形成一個連接4張桌子的答案。 – KillPinguin