我有两张桌子:
Table "credits":
id amount
1 8
2 7
3 2
4 1
5 5
6 4
和
Table "debits":
id amount
1 3
3 2
4 1
5 3
我需要获得每个ID的总余额(credit-dedit),但是余额= 0。理想情况下,这样的事情:
id balance
1 5
2 7
5 2
6 4
到目前为止,我有这个:
SELECT id, SUM(amount) as balance,
FROM
(
SELECT id, amount FROM credits
UNION ALL
SELECT id, -amount FROM debits
)
unified_table
GROUP BY id
但它包括余额= 0:
id balance
1 5
2 7
3 0
4 0
5 2
6 4
我试过了:
SELECT id, SUM(IF( amount > 0, amount, 0)) as balance,
还有:
WHERE balance > 0
和其他修改但它们无法正常工作。我的想法已经不多了。请帮忙,我怎么能省去余额0?谢谢
答案 0 :(得分:1)
在`group by id之后添加余额> 0应该这样做。
中的
如果你不使用group by,那么你可以在where子句中将条件只放在from子句中使用函数的表的列上,因为该函数将应用于行但是group by您正在寻找分组行的总和,因此您可以执行此操作,因为您可以放置所选的列
select column_name, sum(..) as calculate from table group by column_name having calculate > 0
计算结果列而不是表连接 如果你把where(..)> 0放在where子句中,这将不会在组中但在行级别上应用。 对不起我的英语^^,但我认为你明白了
答案 1 :(得分:0)
你可以这样做(使用INNER JOIN
):
SELECT c.id, (c.amount - d.amount) balance
FROM credits c
INNER JOIN debits ON c.id = d.id
WHERE (c.amount - d.amount) <> 0
答案 2 :(得分:0)
使用此查询:
SELECT
`credits`.`id`,
(
`credits`.`amount` - `debits`.`amount`
) AS balance
FROM
`credits`
LEFT JOIN `debits`
ON `debits`.`id` = `credits`.`id`
WHERE (
`credits`.`amount` - `debits`.`amount`
) > 0
答案 3 :(得分:0)
如下所示
select id,sum(credits.amount-debits.amount)as balance
from credits
inner join debits on credits.id = debits.id
group by credits.id
having balance>0
答案 4 :(得分:0)
你可以这样试试,
select c.id, (c.amount - d.amount) as balance from credits c
INNER JOIN debits d ON d.id = c.id
group by c.id
having balance > 0
上述查询将首先获取结果,然后使用having子句过滤记录。