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的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 合计每月值加上 group_concat

将使用 GROUP BY 的查询从 MySQL 转换为 Postgres 和 SQLite

通过laravel eloquent查询Mysql sum group

Drupal 使用 group by 和 sum 查看查询

查询中 group_concat 上的 SQLITE 不需要的行为

Mysql 在没有 SUBQUERY 的同一查询中使用 GROUP BY 和 SUM(没有 group by)。可能的?