我有两张桌子:
表"信用":
]
和
表"借记":
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
我尝试添加"类型"第一列"选择"联盟,然后按"类型"分组。但是我没有工作,因为桌子"借记"没有列"键入"。我怎么能做到这一点?谢谢你的帮助
答案 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列是外键。