使用两个不同表的总和进行mysql计算
如果有两个表:使用两个不同表的总和进行mysql计算,mysql,sql,Mysql,Sql,如果有两个表: TABLE "deposit" card | amount ------------ 2 | 123.43 2 | 56.45 3 | 21.19 + 我要找的是卡号的剩余存款。 卡2示例:123.43+56.45-10.59-10.59(仅状态=完成) 或:金额(卡id为2的存款)-金额(卡id为2且状态为完成的付款) 我尝试了以下mysql选择: SELECT( IFNULL(SUM(deposit.amount),0) - IFNULL(SUM(paymen
TABLE "deposit"
card | amount
------------
2 | 123.43
2 | 56.45
3 | 21.19
+
我要找的是卡号的剩余存款。
卡2示例:123.43+56.45-10.59-10.59(仅状态=完成)
或:金额(卡id为2的存款)-金额(卡id为2且状态为完成的付款)
我尝试了以下mysql选择:
SELECT(
IFNULL(SUM(deposit.amount),0) - IFNULL(SUM(payment.price),0)
) AS remaing_deposit
FROM deposit, payment
WHERE deposit.card = '2'
OR (
payment.card = '2' AND payment.status = 'finish'
)
但是我得到了完全错误的数字
有人能帮我吗?这里的一个挑战是这两张桌子上有不同的牌。MySQL不支持
完全外部连接
。您可以通过联合
获得卡片列表
查询的其余部分通过使用所有卡片上的左外部联接将from
子句和d中的两个表聚合来解决:
select allcards.card, coalesce(d.deposit, 0) - coalesce(p.price, 0) as RemainingDeposit
from (select card from deposit union
select card from payment
) allcards left outer join
(select card, sum(amount) as deposit
from deposit
group by card
) d
on d.card = allcards.card left outer join
(select card, sum(price) as price
from payment
where status = 'finish'
group by card
) p
on p.card = allcards.card;
您似乎缺少一些主键!谢谢你的快速帮助!它工作完美!!!!我加上“WHERE card=2”以获得一张卡的剩余存款。
select allcards.card, coalesce(d.deposit, 0) - coalesce(p.price, 0) as RemainingDeposit
from (select card from deposit union
select card from payment
) allcards left outer join
(select card, sum(amount) as deposit
from deposit
group by card
) d
on d.card = allcards.card left outer join
(select card, sum(price) as price
from payment
where status = 'finish'
group by card
) p
on p.card = allcards.card;