Re: Getting the ranks of results from a query

Поиск
Список
Период
Сортировка
От Bruno Wolff III
Тема Re: Getting the ranks of results from a query
Дата
Msg-id 20040407042954.GA9055@wolff.to
обсуждение исходный текст
Ответ на Getting the ranks of results from a query  (abhi <abhi@MIT.EDU>)
Список pgsql-sql
On Thu, Apr 01, 2004 at 11:05:55 -0500, abhi <abhi@MIT.EDU> wrote:
> I have a query of the form
> 
>     select id from member order by age;
> 
> id
> -----
>  431
>   93
>  202
>  467
>  300
> 
> In addition to the id, I would like the get the rank of the row--
> in other words:
> 
>  id  | rank
> -----+-----------
>  431 | 1
>   93 | 2
>  202 | 3
>  467 | 4
>  300 | 5
> 
> 
> How do I do this with postgres?  In the past, I have used something like
> 
> 
>     select id, identity(int, 1,1) from member order by age;
> 
> 
> is there a postgres equivalent?

Note this is going to be slow. And that it relies on ID being unique.

SELECT id, (SELECT count(*) FROM member a WHERE a.age < b.age OR   (a.age = b.age AND a.id <= b.id)) AS rank FROM
memberb ORDER BY age, id;
 

For example:
bruno=> select * from member;id | age
----+----- 1 |  10 5 |  2010 |   520 |   8 9 |   8
(5 rows)

bruno=> SELECT id, (SELECT count(*) FROM member a WHERE a.age < b.age OR
bruno(>     (a.age = b.age AND a.id <= b.id)) AS rank
bruno->   FROM member b
bruno->   ORDER BY age, id;id | rank
----+------10 |    1 9 |    220 |    3 1 |    4 5 |    5
(5 rows)


В списке pgsql-sql по дате отправления:

Предыдущее
От: Richard Huxton
Дата:
Сообщение: Re: partial unique constraint
Следующее
От: Bruno Wolff III
Дата:
Сообщение: Re: order of results