SQLite ROLLUP查询

时间:2013-03-31 17:35:38

标签: sql sqlite

我想在我的数据库中获得每月余额的摘要。该表包含以下字段

tran_date 

type (Income or Expense)

amount

我可以获得每个月检索每种类型的总和但想要整个月的总和。这是我目前的查询:

SELECT DISTINCT strftime('%m%Y', tran_date), type, SUM(amount) FROM tran WHERE exclude = 0 GROUP BY tran_date, type

返回

032013  Income  100

032013  Expense  200

我想在一行中汇总,在本例中为032013 -100。

1 个答案:

答案 0 :(得分:1)

只需使用正确的group by即可。这使用条件聚合,假设您想要“收入 - 支出”:

SELECT strftime('%m%Y', tran_date), type,
       SUM(case when type = 'Income' then amount when type = 'Expense' then - amount end)
FROM tran WHERE exclude = 0
GROUP BY tran_date;

如果您只想要全额,那么这就更容易了:

SELECT strftime('%m%Y', tran_date), type,
       SUM(amount)
FROM tran WHERE exclude = 0
GROUP BY tran_date;

您的原始查询返回了类型行,因为“type”位于group by子句中。

此外,distinct几乎不需要group by