Re: Windowing Function Patch Review -> ROW_NUMBER without ORDER BY - Mailing list pgsql-hackers

From Andreas Joseph Krogh
Subject Re: Windowing Function Patch Review -> ROW_NUMBER without ORDER BY
Date
Msg-id 200811100030.34057.andreak@officenet.no
Whole thread Raw
In response to Windowing Function Patch Review -> ROW_NUMBER without ORDER BY  ("David Rowley" <dgrowley@gmail.com>)
Responses Re: Windowing Function Patch Review -> ROW_NUMBER without ORDER BY  ("Vladimir Sitnikov" <sitnikov.vladimir@gmail.com>)
List pgsql-hackers
On Sunday 09 November 2008 22:35:01 David Rowley wrote:
> I've been trying to think of a use case for using ROW_NUMBER() with no ORDER
> BY in the window clause.
>
> Using the example table I always seem to be using, for those who missed it
> in other threads.
>
> create table employees (
>   id INT primary key,
>   name varchar(30) not null,
>   department varchar(30) not null,
>   salary int not null,
>   check (salary >= 0)
> );
>
> insert into employees values(1,'Jeff','IT',10000);
> insert into employees values(2,'Sam','IT',12000);
> insert into employees values(3,'Richard','Manager',30000);
> insert into employees values(4,'Ian','Manager',20000);
> insert into employees values(5,'John','IT',60000);
> insert into employees values(6,'Matthew','Director',60000);
>
>
> david=# select *,row_number() over () from employees;
>  id |  name   | department | salary | row_number
> ----+---------+------------+--------+------------
>   1 | Jeff    | IT         |  10000 |          1
>   2 | Sam     | IT         |  12000 |          2
>   4 | Ian     | Manager    |  20000 |          3
>   5 | John    | IT         |  60000 |          4
>   6 | Matthew | Director   |  60000 |          5
>   3 | Richard | Manager    |  30000 |          6
> (6 rows)
>
> row_number seems to assign the rows a number in order of how it reads them
> from the heap. Just to confirm...
>
> update employees set salary = salary where id = 3;
>
> david=# select *,row_number() over () from employees;
>  id |  name   | department | salary | row_number
> ----+---------+------------+--------+------------
>   1 | Jeff    | IT         |  10000 |          1
>   2 | Sam     | IT         |  12000 |          2
>   4 | Ian     | Manager    |  20000 |          3
>   5 | John    | IT         |  60000 |          4
>   6 | Matthew | Director   |  60000 |          5
>   3 | Richard | Manager    |  30000 |          6
> (6 rows)
>
> The spec says: "The ROW_NUMBER function computes the sequential row number,
> starting with 1 (one) for the first row, of the row within its window
> partition according to the window ordering of the window."
>
> I'm just not sure if we should block this or not.
>
> Does anyone see this as a feature?
>
> Does anyone see this as a bug?
>
> Any feedback is welcome

I see this as a greate feature.
It will hopefully be possible to write:

SELECT *, max(row_number()) over() as total_rows from employees;

To get the maximum number of rows in a separate column. Very usefull when writing queries to retrieve "paged" results.
Like"Give me the 20 top articles sorted on date and also the total number of articles" in *one* query, eliminating the
needfor a separate count(*) query. 

There was some discussion regarding this here:
http://archives.postgresql.org/pgsql-hackers/2008-10/msg00729.php

--
Andreas Joseph Krogh <andreak@officenet.no>
Senior Software Developer / CEO
------------------------+---------------------------------------------+
OfficeNet AS            | The most difficult thing in the world is to |
Karenslyst Allé 11      | know how to do a thing and to watch         |
PO. Box 529 Skøyen      | somebody else doing it wrong, without       |
0214 Oslo               | comment.                                    |
NORWAY                  |                                             |
Tlf:    +47 24 15 38 90 |                                             |
Fax:    +47 24 15 38 91 |                                             |
Mobile: +47 909  56 963 |                                             |
------------------------+---------------------------------------------+


pgsql-hackers by date:

Previous
From: "David Rowley"
Date:
Subject: Re: Windowing Function Patch Review -> Performance Comparison.
Next
From: "Vladimir Sitnikov"
Date:
Subject: Re: Windowing Function Patch Review -> ROW_NUMBER without ORDER BY