如何按contract_status统计各类合同的总WAIVED金额?
问题描述
我有两张数据表:
表1:contract(示例)
| contract_id | contract_status |
|---|---|
| 111 | Active |
| 122 | Active |
| 133 | Finished |
| 144 | Active |
| 155 | Finished |
contract_status的取值为:Active 和 Finished
表2:ledger(示例)
| ledger_id | contract_id | ledger_status | amount |
|---|---|---|---|
| 1gh | 111 | WAIVED | 450 |
| 2uk | 111 | PAID | 0 |
| 2jz | 111 | WAIVED | 200 |
| 4bc | 122 | PAID | 0 |
| 5jw | 122 | UNPAID | 150 |
| 3xs | 133 | PAID | 0 |
| 9kd | 133 | WAIVED | 250 |
| 7bf | 144 | WAIVED | 100 |
| 8aq | 155 | UNPAID | 700 |
单个contract可对应多个ledger_id
需求
如何计算每种contract_status(Active和Finished)下的总WAIVED金额?
预期输出
| contract_status | total_amount_waived |
|---|---|
| Active | 750 |
| Finished | 250 |
解决方案
可以通过关联两张表,筛选出ledger_status为WAIVED的记录,再按contract_status分组求和,SQL语句如下:
SELECT c.contract_status, SUM(l.amount) AS total_amount_waived FROM contract c JOIN ledger l ON c.contract_id = l.contract_id WHERE l.ledger_status = 'WAIVED' GROUP BY c.contract_status;
逻辑说明
- 使用
JOIN关联contract和ledger表,关联条件为两张表的contract_id一致; - 通过
WHERE子句筛选出ledger表中状态为WAIVED的记录; - 按
contract_status分组,用SUM()函数计算每组的总金额; - 最终得到每种合同状态对应的豁免金额总和。
内容的提问来源于stack exchange,提问作者Enzo Austin
相关产品推荐
相关产品推荐

