Thread: window functions maybe bug
Hello, I wrote article about statistical function - when I tested Joe Celko's method, I found some problems on not unique dataset: on distinct dataset is rule so rows here is max(hi), then there is min(lo): create table x1 (a integer); insert into x1 select generate_series(1,10); postgres=# select row_number() over (order by a), row_number() over (order by a desc) from x1;row_number | row_number ------------+------------ 10 | 1 9 | 2 8 | 3 7 | 4 6 | 5 5 | 6 4 | 7 3 | 8 2 | 9 1| 10 (10 rows) but on other set I got truncate table x1; insert into x1 values(2),(2),(3),(3),(4),(4),(5),(5),(6),(6),(6),(8),(9),(9),(10),(10); postgres=# select row_number() over (order by a), row_number() over (order by a desc) from x1;row_number | row_number ------------+------------ 16 | 1 15 | 2 14 | 3 11 | 4 13 | 5 12 | 6 9 | 7 10 | 8 7 | 9 8| 10 5 | 11 6 | 12 4 | 13 3 | 14 1 | 15 2 | 16 (16 rows) I am not sure, is this correct? When this solution is correct, then Joe Celko's method for median calculation is buggy. Regards Pavel Stehule
Pavel Stehule <pavel.stehule@gmail.com> writes: > create table x1 (a integer); > insert into x1 values(2),(2),(3),(3),(4),(4),(5),(5),(6),(6),(6),(8),(9),(9),(10),(10); > postgres=# select row_number() over (order by a), row_number() over > (order by a desc) from x1; > row_number | row_number > ------------+------------ > 16 | 1 > 15 | 2 > 14 | 3 > 11 | 4 > 13 | 5 > 12 | 6 > 9 | 7 > 10 | 8 > 7 | 9 > 8 | 10 > 5 | 11 > 6 | 12 > 4 | 13 > 3 | 14 > 1 | 15 > 2 | 16 > (16 rows) > I am not sure, is this correct? I don't see any grounds for arguing that it's wrong. The results for rows with equal "a" values are indeterminate. regards, tom lane
2009/9/2 Tom Lane <tgl@sss.pgh.pa.us>: > Pavel Stehule <pavel.stehule@gmail.com> writes: >> create table x1 (a integer); >> insert into x1 values(2),(2),(3),(3),(4),(4),(5),(5),(6),(6),(6),(8),(9),(9),(10),(10); > >> postgres=# select row_number() over (order by a), row_number() over >> (order by a desc) from x1; >> row_number | row_number >> ------------+------------ >> 16 | 1 >> 15 | 2 >> 14 | 3 >> 11 | 4 >> 13 | 5 >> 12 | 6 >> 9 | 7 >> 10 | 8 >> 7 | 9 >> 8 | 10 >> 5 | 11 >> 6 | 12 >> 4 | 13 >> 3 | 14 >> 1 | 15 >> 2 | 16 >> (16 rows) > >> I am not sure, is this correct? > > I don't see any grounds for arguing that it's wrong. The results for > rows with equal "a" values are indeterminate. I can understand it. So I found Joe Celko's bug :) regards Pavel Stehule > > regards, tom lane >