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首付款,它工作了