Re: [QUESTION] Window function with partition by and order by

Ankit Kumar Pandey <itsankitkp@gmail.com>

From: Ankit Kumar Pandey <itsankitkp@gmail.com>
To: Samed YILDIRIM <samed@reddoc.net>
Cc: pgsql-sql@lists.postgresql.org
Date: 2022-11-27T16:55:05Z
Lists: pgsql-sql
On 27/11/22 21:53, Samed YILDIRIM wrote:
> Hello Ankit,
>
> It is absolutely expected behaviour of a window function with ORDER BY 
> clause. The default frame clause of window definition is *RANGE 
> BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW*. If you add an ORDER BY 
> clause in a window definition, PostgreSQL takes the current row and 
> all rows before it within the partition into calculation. If you don't 
> add, it means all rows within the partition are peers, and PostgreSQL 
> uses all rows for calculation. I'm putting the related part from the 
> documentation and its link below.
>
>     The default framing option is RANGE UNBOUNDED PRECEDING, which is
>     the same as RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW; it
>     sets the frame to be all rows from the partition start up through
>     the current row's last peer (a row that the window's ORDER BY
>     clause considers equivalent to the current row; all rows are peers
>     if there is no ORDER BY).
>
> https://www.postgresql.org/docs/15/sql-select.html#SQL-WINDOW
>
> Best regards.
> Samed YILDIRIM
>
>
> On Sun, 27 Nov 2022 at 18:08, Ankit Kumar Pandey 
> <itsankitkp@gmail.com> wrote:
>
>     Hello,
>
>     While looking at aggregates in window function, I found something
>     unusual and would be glad I could get some clarification.
>
>     Consider following table (mytable):
>
>     id, name
>
>     1, A
>
>     1, A
>
>     2, B
>
>     3, A
>
>     1, A
>
>
>     select *, avg(id) over (partition by name, order by id) from mytable;
>
>     Output:
>
>     id, name, avg
>
>     1, A, 1
>
>     1, A, 1
>
>     1, A, 1
>
>     3, A, 1.5
>
>     2, B, 2
>
>
>     Question is: Average of id for partition name (A) should be 6/4 = 1.5
>     for all rows in that partition but this result is seen only at the
>     last
>     one row in partition (A). Am I missing here something?
>
>
>     Thanks
>
>
>     -- 
>     Regards,
>     Ankit Kumar Pandey
>
>
Okay, I understand this now.

-- 
Regards,
Ankit Kumar Pandey