自定义组和SQL查询中的平均值



我对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

最新更新