来自2个表的2列的值的总和并按列排序

时间:2017-04-04 07:58:51

标签: mysql

我有两张桌子:

表"信用":

]

表"借记":

id | amount | type
1    8        1
2    7        2
3    2        1
4    1        1
5    5        3
6    4        2

我需要得到所有" id' s"余额(信用借方)并按"类型"对其进行分组。到目前为止,我有这个:

id | amount
1    3
1    2
3    2
4    1
5    3
5    1

但它只是给了我" id' s"结余:

SELECT id, SUM(amount) as balance,
FROM
(
    SELECT id, amount FROM credits
    UNION ALL
    SELECT id, -amount FROM debits
)
unified_table
GROUP BY id

理想情况下,我需要这样的事情:

id | balance
1    3
2    7
3    0
4    0
5    1
6    4

我尝试添加"类型"第一列"选择"联盟,然后按"类型"分组。但是我没有工作,因为桌子"借记"没有列"键入"。我怎么能做到这一点?谢谢你的帮助

3 个答案:

答案 0 :(得分:4)

我认为这样做会:

SELECT c.type, sum(c.amount - IFNULL(d.amount,0))
FROM credits c LEFT OUTER JOIN (SELECT id, sum(amount) FROM debits GROUP BY id) d
    ON c.id=d.id
GROUP BY c.type

我们的想法是首先对debits表进行分组,然后将其与credits表联系起来,这将生成一个可以按type分组的表

答案 1 :(得分:1)

试试这个:

gensims

答案 2 :(得分:1)

这是我的解决方案:

SELECT  
    credits.`type`, 
    credits.`amount` - IFNULL(t_debit.`d_amount`, 0) AS balance 
FROM 
    credits, 
    (SELECT id, SUM(amount) AS d_amount FROM debits GROUP BY id)t_debit 
WHERE 
    credits.`id` = t_debit.`id` 
GROUP BY 
    credits.`type`;

首先,我从debits表组中选择ID总和,然后在信用表上与信用卡ID匹配的信用表上进行另一个选择查询。我不使用UNION运算符,因为debits表中的id列是外键。