Hello Ankit.
This behavior is correct. This is because you are using ORDER BY in your aggregation function.
Looking at the documentation you will find the following quote:
"You can also control the order in which rows are processed by window functions by using ORDER BY within OVER. (The window ORDER BY doesn't even have to match the order in which the rows are produced)."
So, if you use ORDER BY you are controlling how the row are processed.
If you don't use, the result is like this:
postgres=# select *, avg(id) over (partition by name) from my_teste ;
id | name | avg
----+------+--------------------
1 | A | 1.5000000000000000
1 | A | 1.5000000000000000
3 | A | 1.5000000000000000
1 | A | 1.5000000000000000
2 | B | 2.0000000000000000
(5 rows)
On 27 Nov 2022 13:08 -0300, 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