来自2个表的2列中的值的总和,忽略结果等于0

时间:2017-04-04 06:21:07

标签: mysql

我有两张桌子:

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?谢谢

5 个答案:

答案 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子句过滤记录。