Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Sum - Fatal编程技术网

Mysql 带条件求和

Mysql 带条件求和,mysql,sum,Mysql,Sum,我有一张这样的桌子 ---------------------------------------------------------------------- | TransactionDate | Price | DownPayment | Status | DatePaid | --------------------------------------------------------------------- 2018-01-03 | 1000

我有一张这样的桌子

----------------------------------------------------------------------
| TransactionDate | Price      | DownPayment | Status   |  DatePaid   |
 ---------------------------------------------------------------------
 2018-01-03       | 1000       | 1000        | PAID OFF |  2018-01-03
 2018-01-03       | 1000       | 500         | -500     |  2018-01-03
 2018-01-01       | 1000       | 0           | PAID OFF |  2018-01-03
select SUM(CASE WHEN Status = 'PAID OFF' THEN Price ELSE Price/2 END) as total where date(DatePaid) = CURDATE()
根据表格,我有3行,第一行是有人进行交易并刚刚付清交易,第二行是有人支付了一半的价格,最后一行是有人以前做过交易,但今天才付清


我想根据支付的日期计算我今天得到的钱的总数,在那张表上,总数应该是2500

在mysql中,我们可以像这样使用case语句

----------------------------------------------------------------------
| TransactionDate | Price      | DownPayment | Status   |  DatePaid   |
 ---------------------------------------------------------------------
 2018-01-03       | 1000       | 1000        | PAID OFF |  2018-01-03
 2018-01-03       | 1000       | 500         | -500     |  2018-01-03
 2018-01-01       | 1000       | 0           | PAID OFF |  2018-01-03
select SUM(CASE WHEN Status = 'PAID OFF' THEN Price ELSE Price/2 END) as total where date(DatePaid) = CURDATE()

但是表的设计并不能很好地执行这些聚合函数。尤其是status列。

在mysql中,我们可以使用类似这样的case语句

----------------------------------------------------------------------
| TransactionDate | Price      | DownPayment | Status   |  DatePaid   |
 ---------------------------------------------------------------------
 2018-01-03       | 1000       | 1000        | PAID OFF |  2018-01-03
 2018-01-03       | 1000       | 500         | -500     |  2018-01-03
 2018-01-01       | 1000       | 0           | PAID OFF |  2018-01-03
select SUM(CASE WHEN Status = 'PAID OFF' THEN Price ELSE Price/2 END) as total where date(DatePaid) = CURDATE()

但是表的设计并不能很好地执行这些聚合函数。尤其是状态栏。

你是如何得到2500这个数字的?我想你的表格设计很差。您应该为每笔交易设置一行,并将其付清。然后你可以根据日期来计算它们的总和。@Cookie Monster第一个=1000,第二个=500,第三个=1000你怎么得到这个数字2500?我猜你的桌子设计很差。您应该为每笔交易设置一行,并将其付清。然后你可以根据日期计算它们的总和。@Cookie Monster第一次=1000,第二次=500,第三次=1000谢谢,我修改了ELSE首付款,它工作了谢谢,我修改了ELSE首付款,它工作了