SQLITE 每月使用 SUM 查询 GROUP BY
Posted
技术标签:
【中文标题】SQLITE 每月使用 SUM 查询 GROUP BY【英文标题】:SQLITE query monthly GROUP BY with SUM 【发布时间】:2012-06-29 04:51:19 【问题描述】:我已经被这个问题困扰了一段时间(android SQLITE)。我有 2 列 - 日期和金额。日期以 YYYYMMDD 格式存储。
日期金额
20120521-------50 20120506-------40 20120311-------30 20120202--------20 20120125--------10
我需要的是一个 SQL 查询(Android SQLITE),它将输出两列 - 月份和截至该月的累计总数。如果一个月没有任何交易,它仍然应该评估累计总数。
所以我需要这里的输出(注意四月没有交易)
月累计-总计
5月-------150 四月-------60 三月-------60 2月-------30 1月-------10
【问题讨论】:
我不认为你可以使用sql query sentence
来获得你想要的结果,如果使用group
,它会分组什么? date
?不,您的日期也不同,您想在一个月内汇总所有金额,可能您需要在代码中进行过滤,除了查询。
【参考方案1】:
它应该可以工作:
SELECT strftime('%m', date), SUM(Amount)
FROM myTable
GROUP BY strftime('%m', date)
对不起,我忘记了你的这部分问题“..如果一个月没有任何交易,它仍然应该评估累计总数。”
解决方案:简单的解决方案是在表中包含所有月份的 DUMMY 条目。
【讨论】:
【参考方案2】:困难,因为简单的方法是编写一个存储过程来完成它,但在 sqlite 中不受支持。但是看看这个 - 也许这种方式可能有用 Android - easy/efficient way to maintain a "cumulative sum" for a SQLite column 你也可以尝试在android端做累积加法
【讨论】:
【参考方案3】:你不能像这样计算。您可以通过两种方式做到这一点:
-
按月分组,然后在Android端总结,加上缺少的月份。
尝试使用存储过程来实现。 (对于您的情况,我不确定在 sql lite 上是否可行。)阅读this
所以我会选择第一个选项。
【讨论】:
存储过程在 sqlite 中不可用。以上是关于SQLITE 每月使用 SUM 查询 GROUP BY的主要内容,如果未能解决你的问题,请参考以下文章
将使用 GROUP BY 的查询从 MySQL 转换为 Postgres 和 SQLite
通过laravel eloquent查询Mysql sum group
查询中 group_concat 上的 SQLITE 不需要的行为
Mysql 在没有 SUBQUERY 的同一查询中使用 GROUP BY 和 SUM(没有 group by)。可能的?