2012-04-23 49 views
1

我有2个表:SUM在加盟领域

团队:

|-- id -- username --| 
|__ 1 __ user1 __| 
|__ 2 __ user2 __| 
|__ 3 __ user3 __| 

付款:

|-- id -- user_id -- amount --| 
|__ 1 __ 1  __ 1000 --| 
|__ 2 __ 1  __ 5000 --| 
|__ 3 __ 2  __ 3000 --| 
|__ 4 __ 1  __ 4500 --| 
|__ 5 __ 2  __ 1000 --| 

我想获得用户的支付总额。在单个查询中。结果是这样的:

|-- user_id -- username -- total_payment --| 
|__ 1  __ user1 __ 10500   --| 
|__ 2  __ user2 __ 4000   --| 

谢谢。

回答

3

如果你只想要user_id没有username,没有必要为联接,因为在所有分组只需要在Payments发生对抗user_id

SELECT 
    user_id, 
    SUM(amount) AS total 
FROM Payments 
GROUP BY user_id 

编辑:的问题已经被编辑成包括在输出的用户名,因此使用下面的查询 - 联接是必要

如果你想加入用户名,它是对FROMGROUP BY条款的简单添加。

SELECT 
    Teams.user_id, 
    username, 
    SUM(amount) AS total 
FROM 
    Teams 
    /* LEFT JOIN used in case a user has no payments -- will still show in the list */ 
    LEFT JOIN Payments ON Teams.user_id = Payments.user_id 
GROUP BY 
    Teams.user_id, 
    Teams.username 
0
SELECT A.user_id,B.user_name,A.total AS total_payment 
FROM 
(
SELECT 
    user_id, 
    SUM(amount) AS total 
FROM Payments 
GROUP BY user_id 
) A, 
Teams B 
WHERE A.user_id = B.id;