Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql基于两列计算债务和存款_Mysql_Join - Fatal编程技术网

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