MySQL连接查询和总和记录

时间:2017-08-24 07:04:57

标签: mysql sql

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

1 个答案:

答案 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