2017-04-04 75 views
0

我有2个表:和值从2列从2个表忽略结果等于0

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的总余额(信用D编辑)但留下余额= 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?谢谢

+1

添加有平衡> 0以后按id分组这应该这样做 – Cherif

+0

哇谢谢你!它的工作就像一个魅力。为什么'哪里平衡> 0'不工作,'有平衡> 0'工作? – karlosuccess

回答

1

在group by id之后添加平衡> 0,这应该做到这一点。

在WHERE子句中,你可以把条件仅在表中使用函数子句,如果你不通过,因为该功能将被applicated使用组接受列

该行,但与你组正在寻找所以有会做,因为你可以把选择

select column_name, sum(..) as calculate from table group by column_name having calculate > 0 

计算列的分组行的总和结果列不是表加入 ,如果你把sum(..)> 0放在where子句中,这将不会被应用在组中,而是在行的级别。 对不起我的英语^^但我认为你有想法

+0

我明白了。非常感谢您的帮助和时间! – karlosuccess

+0

任何时候我的朋友^^ – Cherif

+0

可以请你帮我这个,如果你有时间请http://stackoverflow.com/questions/43201475/sum-of-values-from-2-columns-from-2-tables-和排序按一列 – karlosuccess

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 
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 
0

做类似下面

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

+0

谢谢,但实际上一些信用证中的“id”在借方中没有对应的行。所以我认为这就是为什么JOIN不起作用(我的不好)。请参阅我的版本。请帮忙。谢谢 – karlosuccess