如何在SQLite中实现指定年份的月度收支统计?
SQLite实现指定年份月度收支统计方案
我来帮你搞定这个月度收支统计的需求,直接上可落地的实现方案:
核心SQL查询语句
针对你的表结构和需求,我们可以用条件聚合配合SQLite的日期函数来实现分组统计,SQL代码如下:
SELECT strftime('%Y-%m', date) AS year_month, SUM(CASE WHEN type = 'income' THEN amount ELSE 0 END) AS income, SUM(CASE WHEN type = 'spending' THEN amount ELSE 0 END) AS spending FROM your_table_name -- 替换成你的实际表名 WHERE strftime('%Y', date) = '2020' -- 替换成你要查询的目标年份 GROUP BY year_month ORDER BY year_month DESC;
语句细节解释
- 日期格式化:用
strftime('%Y-%m', date)把date字段转换成YYYY-MM格式,作为分组的唯一标识 - 条件求和:
- 总收入:只累加
type为income的amount值,无匹配项时加0 - 总支出:同理,只累加
type为spending的amount值
- 总收入:只累加
- 年份筛选:通过
strftime('%Y', date) = '目标年份'精准过滤指定年份的数据 - 排序逻辑:按
year_month倒序排列,和你给出的示例输出顺序完全一致
测试数据验证
用你提供的5条测试数据执行上述SQL(假设表名为records),会得到如下结构化结果:
| year_month | income | spending |
|---|---|---|
| 2020-11 | 95 | 35 |
| 2020-09 | 200 | -120 |
| 2020-08 | 88 | 0 |
生成目标JSON格式输出
如果需要直接得到你示例中的键值对JSON格式,可以在SQLite命令行中执行以下操作:
# 切换到JSON输出模式 sqlite> .mode json # 将结果输出到文件(可选) sqlite> .output monthly_stats.json # 执行查询语句 sqlite> SELECT ...; -- 上面的完整SQL语句 # 恢复输出到控制台 sqlite> .output stdout
生成的monthly_stats.json会是数组格式,你可以在应用层(比如Python/Java)轻松转换为你要的键值对结构,或者用SQLite的JSON函数进一步处理,但应用层转换会更灵活。
内容的提问来源于stack exchange,提问作者Answer_K
相关产品推荐
相关产品推荐

