From: | "scott(dot)marlowe" <scott(dot)marlowe(at)ihs(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | John Liu <johnl(at)emrx(dot)com>, <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: select distinct w/order by |
Date: | 2004-03-31 22:35:26 |
Message-ID: | Pine.LNX.4.33.0403311534410.26942-100000@css120.ihs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Wed, 31 Mar 2004, Tom Lane wrote:
> "John Liu" <johnl(at)emrx(dot)com> writes:
> > The original simple SQL -
> > select distinct atcode from TMP order by torder;
>
> This is not "simple", it is "broken SQL with an undefined result".
>
> If DISTINCT merges multiple rows with the same atcode, how are we
> supposed to know which row's value of torder to sort the merged
> row on?
>
> Your other database was no doubt making a random choice and giving
> you a random result ordering in consequence. You need to think harder
> about what behavior you really want.
>
> Once you can define the behavior (ie, just which torder you want to use)
> you can probably implement it with something like
>
> select atcode from
> (select distinct on (atcode) atcode, torder from table
> order by atcode, ???
> ) ss
> order by torder;
>
> where the ??? ordering determines which torder you get in each atcode group.
> See the SELECT DISTINCT ON example in the SELECT reference page.
I did it like this:
select atcode from table group by atcode order by max(toorder);
Is that equivalent?
From | Date | Subject | |
---|---|---|---|
Next Message | Randall Skelton | 2004-03-31 22:41:03 | Sub-query too slow |
Previous Message | Stephan Szabo | 2004-03-31 21:47:15 | Re: Problem with foreign keys and locking |