如何减去类型不同的行的同一列?

gab6jxml  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(349)

我想减去同一个表where的行(where子句不同)。

SELECT SUM(`balance`) AS `balance` FROM `vouchers`  WHERE `type`='CP' AND `post_status`='yes' GROUP BY `interactive_person`;

上面的查询为第一类行提供了理想的结果!第二个查询是

SELECT SUM(`balance`) AS `balance` FROM `vouchers`  WHERE `type`='CR' AND `post_status`='yes' GROUP BY `interactive_person`;

这些查询返回多个按交互人员分组的行,我希望它减去交互人员(是一个数字)相同但类型更改的记录。简言之,它就像现金收据-现金付款。我使用第一个查询作为第二个查询的子查询,但错误显示子查询返回的行多于一行。我需要帮助来解决这个问题!

osh3o9ms

osh3o9ms1#

你可以用 case 计算你的 sum() 在同一查询中

SELECT 
SUM(CASE WHEN `type`='CP' THEN `balance` ELSE 0 END) AS CP_balance,
SUM(CASE WHEN `type`='CR' THEN `balance` ELSE 0 END) AS CR_balance,
SUM(CASE WHEN `type`='CP' THEN `balance` WHEN `type`='CR' THEN  -1 * `balance` ELSE 0 END) AS diff
FROM `vouchers`  
WHERE `post_status`='yes' 
GROUP BY `interactive_person`;

相关问题