pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Randall Lucas <rlucas@tercent.net>
Cc: pgsql-sql@postgresql.org
Subject: Re: Ordinal value of row within set returned by a query?
Date: Thu, 17 Apr 2003 15:35:41 -0400
Message-ID: <16894.1050608141@sss.pgh.pa.us> (raw)
In-Reply-To: <9AE98E9A-70FE-11D7-9BCD-000A957653D6@tercent.net>
References: <9AE98E9A-70FE-11D7-9BCD-000A957653D6@tercent.net>

Randall Lucas <rlucas@tercent.net> writes:
> I'm puzzling over whether it is possible within SQL alone to determine 
> the ordinal position of a row within the set returned by a query.  It 
> seems clear to me that pgsql "knows" what position in a set a 
> particular tuple holds, since one can OFFSET, ORDER BY, and LIMIT; 
> however, I can't seem to find a function or "hidden field" that will 
> return this.

That's because there isn't one.

The traditional hack for this has been along the lines of

	create temp sequence foo;

	select nextval('foo'), * from
	(select ... whatever ... order by something) ss;

	drop sequence foo;

which is illegal per the SQL spec (you can't ORDER BY in a subselect
according to spec), but it's the only way that you can do computation
after a sort pass.  In a single-level SELECT, ORDER BY happens after
the computation of the SELECT output values.

Usually it's a lot easier to plaster on the row numbers on the client
side, though.

> What I would like is something along these lines:  I wish to ORDER BY 
> an ordinal field that is likely to be present, but may not be present, 
> and then by a unique value to ensure stability of ordering.

Why don't you order by the ordinal field, then the table's primary key?
(If it hasn't got a primary key, maybe it should.)

			regards, tom lane




view thread (3+ messages)  latest in thread

Message-ID: <16894.1050608141@sss.pgh.pa.us>
Permalink:  ../16894.1050608141@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/16894.1050608141@sss.pgh.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: tgl@sss.pgh.pa.us, rlucas@tercent.net
  Subject: Re: Ordinal value of row within set returned by a query?
  In-Reply-To: <16894.1050608141@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox