mysql基于两列计算债务和存款
我有一个包含以下列的表:mysql基于两列计算债务和存款,mysql,join,Mysql,Join,我有一个包含以下列的表: CREATE TABLE tblapp ( `app_id` INTEGER, `cust_id` INTEGER, `app_price` INTEGER, `app_price_paid` INTEGER ); INSERT INTO tblapp (`app_id`, `cust_id`, `app_price`, `app_price_paid`) VALUES ('1', '1', '100', '100'), ('2', '2'
CREATE TABLE tblapp (
`app_id` INTEGER,
`cust_id` INTEGER,
`app_price` INTEGER,
`app_price_paid` INTEGER
);
INSERT INTO tblapp
(`app_id`, `cust_id`, `app_price`, `app_price_paid`)
VALUES
('1', '1', '100', '100'),
('2', '2', '50', '0'),
('3', '1', '0', '100'),
('4', '3', '100', '50');
我有以下sql和输出:
SELECT
cust_id,
(sum(COALESCE(app_price,0)) - sum(COALESCE(app_price_paid,0))) as total
FROM tblapp
group by cust_id;
| cust_id | total |
| ------- | ----- |
| 1 | -100 |
| 2 | 50 |
| 3 | 50 |
|---------|-------|
基于以上,如果我计算总债务为0,则为total-100+50+50之和
但实际债务是100 50+50,存款是100-100
我可以根据我的数据查询输出下表吗
debt deposit
100 100
多谢各位
债务=必须如何支付金钱
存款=多付了多少钱。您可以再次使用聚合:
WITH cte AS (
SELECT cust_id,
(sum(COALESCE(app_price,0)) - sum(COALESCE(app_price_paid,0))) as total
FROM tblapp
group by cust_id
)
SELECT SUM(CASE WHEN total< 0 THEN -total END) AS debt,
SUM(CASE WHEN total>= 0 THEN total END) AS deposit
FROM cte;
您添加了一行“3”、“1”、“0”、“100”,价格为零,付款为100??听起来有点奇怪。因此,Cust 1是通过100@RiggsFolly不,因为客户预付了一些费用。这就是存款。预付款。对于MySQL和MariaDB的旧版本,我们可以不用cte吗。作为第二个选项。简单地用查询替换CTE