>我正在尝试用 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 |
----------------------------------
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