我对SQL查询有一个疑问,我可以使用Postgres做以下情况:
1-如果我有数百万的行,每行都有两个列"日期和值"
2-我想对每1000行分组,然后返回"日期和avgvalue(1000行)"
我的数据集的示例:
Date | Value
2010 | 4
2011 | 2
2012 | 6
2013 | 8
2014 | 6
2015 | 4
2016 | 4
2017 | 3
2018 | 5
....
如果我想通过计算价值列的平均值来对每三个行分组,则输出应像这样:
Date | Value
2010-2012 | (4+2+6)/3
2013-2015 | (8+6+4)/3
2016-2018 | (4+3+5)/3
谢谢所有
如果我正确理解您,则要按日期进行分组,并在每个日期内将组分组为1000行的批次,并计算该组的值。
SELECT
date,
rn,
avg(value)
FROM
(
SELECT
date,
value,
row_number() OVER(partition by date) / 1000 as rn
FROM
schema.table
) a
GROUP BY date,rn
此处的关键是row_number()
位,它创建了一个变量,该变量会逐行增加。我们使用(按日期分区),这意味着计数器将对日期的每个值重新启动。
然后,我们将其除以1000,以便每个日期的每个1000行的每个块对于rn
的值相同。然后,我们按日期进行分组RN,要获得所需的输出。
此查询返回的是每个日期每1000行的一行,该块的平均值。
您可以按任何表达式进行分组,在您的情况下,您需要添加一个行号,然后使用Difise基于行号计算组。请注意,您还需要订购日期列,否则您将有一个奇怪的结果。
http://sqlfiddle.com/#!15/9b773f/9/0