我正在尝试使用4个表编写JOIN查询。我需要查询来返回客户获得的利润总额。在表格结构下面添加了所需的结果。
user_profile
系统中所有用户的详细信息
---------------------
| ID | user_id |
---------------------
| 1 | 1001 |
| 2 | 1002 |
| 3 | 1003 |
| 4 | 1004 |
---------------------
manager_client
此表用于区分他/她下的经理和客户
----------------------------
|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 |
----------------------------------
答案 0 :(得分: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对所有事务进行分组。 最后将所有利润加起来。
编辑:如果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