| From: | Ankit Kumar Pandey <itsankitkp(at)gmail(dot)com> |
|---|---|
| To: | Samed YILDIRIM <samed(at)reddoc(dot)net> |
| Cc: | pgsql-sql(at)lists(dot)postgresql(dot)org |
| Subject: | Re: [QUESTION] Window function with partition by and order by |
| Date: | 2022-11-27 16:55:05 |
| Message-ID: | 2e8fb31d-b09f-f195-b810-6e6683c656cc@gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| 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(at)gmail(dot)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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Shaozhong SHI | 2022-12-09 12:55:16 | Change detection |
| Previous Message | Ankit Kumar Pandey | 2022-11-27 16:54:58 | Re: [QUESTION] Window function with partition by and order by |