mysql - MySQL:根据账单日期过去多少天显示汇总会费
问题描述
我想要达到什么目的?
预期结果屏幕截图说明
:了解自账单日期过去以来应支付的金额。这里 0-15 表示账单日期已过 15 天,16-30 表示账单日期已过 16 至 30 天,我想知道这些范围内的到期金额和最后的总计。
涉及的表数: 1
表:用户表
相关列:
bill_date
pending_amount
我使用的查询:
SELECT (CASE
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 0 AND 15 THEN '0-15'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 16 AND 30 THEN '16-30'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 31 AND 45 THEN '31-45'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 46 AND 60 THEN '46-60'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 61 AND 90 THEN '61-90'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 91 AND 180 THEN '91-180'
WHEN DATEDIFF(NOW(), bill_date) BETWEEN 181 AND 365 THEN '181-365'
WHEN DATEDIFF(NOW(), bill_date) >= 366 THEN '> 365
END
) as bill_range,
SUM(pending_amount) as amount_due,
FROM
`user`
GROUP BY bill_range
我得到的结果:我得到的
当前结果
如何达到结果?
解决方案
您的 CASE 语句仅创建 1 列。
您需要条件聚合:
SELECT
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 0 AND 15 THEN pending_amount ELSE 0 END) `0-15`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 16 AND 30 THEN pending_amount ELSE 0 END) `16-30`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 31 AND 45 THEN pending_amount ELSE 0 END) `31-45`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 46 AND 60 THEN pending_amount ELSE 0 END) `46-60`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 61 AND 90 THEN pending_amount ELSE 0 END) `61-90`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 91 AND 180 THEN pending_amount ELSE 0 END) `91-180`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) BETWEEN 181 AND 365 THEN pending_amount ELSE 0 END) `181-365`,
SUM(CASE WHEN DATEDIFF(NOW(), bill_date) >= 366 THEN pending_amount ELSE 0 END) `> 365`,
SUM(pending_amount) `grand total`
FROM `user`
推荐阅读
- callback - Javascript中Callback的严格定义
- terraform - 如何在 terraform 中运行 powershell 脚本?
- amazon-web-services - 使用身份池(联合身份)时如何通过管理员创建用户
- c++ - 简单的阶乘查找函数
- excel - VBA 中的 Excel Solver 给出的结果与手动执行 Solver 不同
- node.js - 在 Docker 中同时支持 .net core 2.1+ 和(节点或 PowerShell?)的 .NET Core 映像
- ruby-on-rails - Rails 应用程序中未弹出模态窗口
- grep - 在 alpine 与 ubuntu 上使用来自 nc 的管道的 grep 的不同行为
- c++ - 无法使用 CMake 将 Boost 库链接到 C++14 应用程序
- gnuplot - gnuplot 一个三元中的两个条件