PostgreSQL:按多列聚合
PostgreSQL: Aggregate by more than one column
我有以下数据格式:
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
在这种情况下,我得到了一个我无法真正理解的总和,即它没有加起来应该加起来的任何东西。任何帮助将不胜感激,提前致谢!
您想 GROUP BY extract('day' FROM eventtime)
或 GROUP BY CAST(eventtime AS date)
。
请注意,这将阻止在 eventtime
上使用任何索引。如果您需要,您可以创建一个与您在 group by
子句中使用的内容相匹配的表达式索引。
您需要通过删除时间部分将 eventtime
转换为日期。我认为最简单的方法是使用 date_trunc()
:
select id, date_trunc('day', eventtime) as eventday, sum(use)
from table
group by id, eventday
order by id, eventday;
我不确定为什么您的示例查询在 select
中有 id
,但在 group by
中有 user
。
我有以下数据格式:
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
在这种情况下,我得到了一个我无法真正理解的总和,即它没有加起来应该加起来的任何东西。任何帮助将不胜感激,提前致谢!
您想 GROUP BY extract('day' FROM eventtime)
或 GROUP BY CAST(eventtime AS date)
。
请注意,这将阻止在 eventtime
上使用任何索引。如果您需要,您可以创建一个与您在 group by
子句中使用的内容相匹配的表达式索引。
您需要通过删除时间部分将 eventtime
转换为日期。我认为最简单的方法是使用 date_trunc()
:
select id, date_trunc('day', eventtime) as eventday, sum(use)
from table
group by id, eventday
order by id, eventday;
我不确定为什么您的示例查询在 select
中有 id
,但在 group by
中有 user
。