PostgreSQL:由多个列聚合

时间:2015-06-19 00:01:54

标签: sql postgresql aggregate-functions

我有以下数据格式:

id       eventtime           use
A    2015-01-01 00:00:00-01    5.2
.
.    2015-06-06 23:59:50-01    5.7  
B 
.
.

我正在尝试获取表单的输出:

id        eventtime              use
A         2015-01-01             1200
.         2015-06-06             1400  
.
B         2015-01-01             1500    

基本上是我数据库中每一天每个用户的项目使用总和。

我试过

select id, eventtime, sum(use) from table group by id,eventtime

在这种情况下,我得到了一个我无法理解的聚合,即它不会增加它应该的任何东西。任何帮助将不胜感激,提前谢谢!

2 个答案:

答案 0 :(得分:0)

您想要GROUP BY extract('day' FROM eventtime)GROUP BY CAST(eventtime AS date)

请注意,这会阻止在eventtime上使用任何索引。如果需要,可以创建与group by子句中使用的表达式索引相匹配的表达式索引。

答案 1 :(得分:0)

您需要通过删除时间组件将eventtime转换为日期。我认为最简单的方法是使用date_trunc()

select id, date_trunc('day', eventtime) as eventday, sum(use)
from table
group by id, eventday
order by id, eventday;

我不确定为什么您的示例查询在id中有select,在user中有group by