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 по дате отправления: