2017-08-24 9 views
0

4つのテーブルを持つJOINクエリを作成しようとしています。私は彼らの顧客が得る利益の合計SUMを返すためにクエリが必要です。以下にテーブル構造、必要な結果が追加されました。システム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-を参照してください。私にとっては非常にシンプルなSQLクエリーのようなものです。 – Strawberry

+1

ようこそ、スタックオーバーフロー!純粋なコードの書き込み要求は、スタックオーバーフローに関するトピックではありません。ここでは特定のプログラミング問題に関連する質問がありますが、私たちはあなた自身で書くことを喜んで支援します! [あなたが試したこと](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 

のように見えるです。

説明:すべてのテーブルを自然に結合します(つまり、user_profileは 'user_id'列を介してclient_transと結合されます)。 その後、すべてのトランザクションを同じuser_idでグループ化します。 最後にすべての利益を加算します。

編集:client_transでUSER_IDが実際に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