MySQL条件求和问题:基于DatePaid统计当日收款总额
问题:基于DatePaid统计当日收款总额(MySQL条件求和)
先看一下你的交易数据表:
| 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 |
需求很明确:基于DatePaid字段统计2018-01-03的当日收款总额,预期结果是2500。这里的核心是根据每条记录的Status来判断当日实际收到的金额:
- 当
Status为PAID OFF时,不管交易是哪天发生的,当日结清意味着收到了全额Price; - 当
Status不是PAID OFF时(比如第二条的部分付款),当日实际收到的是DownPayment金额。
对应的MySQL条件求和语句如下:
SELECT SUM( CASE WHEN Status = 'PAID OFF' THEN Price ELSE DownPayment END ) AS TotalCollected FROM your_transaction_table -- 这里替换成你的实际表名 WHERE DatePaid = '2018-01-03';
语句解释:
- CASE表达式:精准匹配两种收款场景的计算规则,判断每条记录的实际收款金额;
- SUM()聚合函数:将所有符合日期条件的记录的收款金额累加;
- WHERE子句:过滤出
DatePaid为目标日期的记录,确保只统计当日收款; - AS TotalCollected:给求和结果起一个直观的别名,方便阅读输出。
验证结果:
代入你的3条数据计算:
- 第一条:
Status=PAID OFF,加Price=1000; - 第二条:
Status≠PAID OFF,加DownPayment=500; - 第三条:
Status=PAID OFF,加Price=1000;
总和:1000+500+1000=2500,完全符合预期。
内容的提问来源于stack exchange,提问作者Ary Maulana
相关产品推荐
相关产品推荐

