我想对数据进行分组,而没有任何特定标准,只是每个结果组的数据数。我有一张这样的桌子:
DATE VAL1 VAL2
------------ ------ ------
01-01-2013 5 8
01-02-2013 14 23
01-03-2013 10 6
01-04-2013 21 88
01-05-2013 9 11
01-06-2013 4 9
01-07-2013 19 42
01-08-2013 8 4
01-09-2013 12 1
01-10-2013 2 8
01-11-2013 31 65
01-12-2013 3 6
...
认为日期字段可以是例如数字而不是日期...
我想要的是,例如,获取数据组的总和或平均值,其中组具有特定数量的行(所有组的数量相同)。
例如,对于每组三行,我想要获得VAL1的总和与VAL2的平均值:
INTERVAL SUM VAL 1 AVG VAL 2
----------------------- --------- ---------
01-01-2013 - 01-03-2013 29 12.3
01-04-2013 - 01-06-2013 34 33.3
01-07-2013 - 01-09-2013 39 15.6
01-10-2013 - 01-12-2013 36 26.3
...
我确实认为可以通过查询进行操作,但是我找不到找到正确的“ group by”语句的方法。有人可以帮我吗?
在此先多谢!
最佳答案
您可以使用row_number函数除以3来为每组3个连续行分配唯一编号。然后,您可以汇总此组号。
select min("DATE") ||'-'||max("DATE"),
sum(val1),
avg(val2)
from (
select "DATE", val1, val2,
ceil(row_number() over (order by "date") / 3) as grp
from mytab
) as x
group by grp
order by grp;