结合GROUP BY和SUM的SQL

时间:2009-10-28 20:26:17

标签: sql sqlite

我需要SQL帮助。我有一个像这样的sqlite表;

CREATE TABLE mytable (datetime DATE, type TEXT, amount REAL)

我需要一个查询来总结每种类型和年 - 月的数量(因为你可以看到年份也被提取,因为数据可以跨越几年)。我已经到了中途,但我对SQL有点生气。

sqlite> SELECT strftime('%Y',datetime) AS year, strftime('%m',datetime) AS month, type, amount FROM mytable ;

2009|06|Type1|-1000.0
2009|06|Type1|-100.0
2009|06|Type2|-100.0
2009|07|Type1|-214.91
2009|07|Type2|-485.0

我在上面的查询中尝试过SUM和GROUP BY的多种组合,但是没有一种能够满足我的需求。我想要的是一个结果:

2009|06|Type1|-1100.0
2009|06|Type2|-100.0
2009|07|Type1|-214.91
2009|07|Type2|-485.0

是的,类型应该是外键,我简化了一些内容,以便更容易提出问题:)

1 个答案:

答案 0 :(得分:15)

SELECT strftime('%Y',datetime) AS year, 
       strftime('%m',datetime) AS month, 
       type, 
       Sum(amount) As Amount 
FROM mytable 
Group By 1, 2, 3

注意

某些数据库不支持逐个索引,因此您必须这样做。

SELECT strftime('%Y',datetime) AS year, 
       strftime('%m',datetime) AS month, 
       type, 
       Sum(amount) As Amount 
FROM mytable 
Group By strftime('%Y',datetime), 
       strftime('%m',datetime), 
       type