MySQL 联接查询和求和记录



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

最新更新