Thread: order by, but eliminating dupes

order by, but eliminating dupes

From
LH
Date:
So lets say I got a table A(x,y,z, Q) ordered by column Q, with contents
like so:

x      y      z    Q
------------------------
21    5      x     1
21    5      x     2
43   10      t     3
1     2       a     5
43   10      t     10
21    5      x     50

what I would like is to take the results of this query, and maintaining
the order, only list x, y, z , AND
not list any duplicates.

So the result I'd want after getting this query would be:

x     y     z
----------------
21    5    x
43   10    t
1      2    a

So I'm pulling the results as they come along, and ignore any subsequent
dupes.

I don't know if this is even possible. I've tried combinations of SELECT
DISTINCT, GROUP BY, and others
with
no luck. The best I could do was to do the order by in a subquery, then
do a SELECT UNIQUE on the subquery.
But that kills the order of the subquery. I've tried group by x,y,z but
then I can't ORDER BY Q.

- L


Re: order by, but eliminating dupes

From
Bruno Wolff III
Date:
On Wed, Sep 03, 2003 at 22:52:44 -0400,
  LH <_pgsql-novice_@geekhouse.no-ip.com> wrote:
> So lets say I got a table A(x,y,z, Q) ordered by column Q, with contents
> like so:
>
> But that kills the order of the subquery. I've tried group by x,y,z but
> then I can't ORDER BY Q.

I think you can do something like this:

select x, y, z from
  (select distinct on (x, y, z) x, y, z, q order by x, y, z, q)
  order by q;

Re: order by, but eliminating dupes

From
Jeffrey Melloy
Date:
Something like this works:
select a,b,c from t1 group by a,b,c order by min(q)

Jeff
On Wednesday, September 3, 2003, at 09:52  PM, LH wrote:

> So lets say I got a table A(x,y,z, Q) ordered by column Q, with
> contents
> like so:
>
> x      y      z    Q
> ------------------------
> 21    5      x     1
> 21    5      x     2
> 43   10      t     3
> 1     2       a     5
> 43   10      t     10
> 21    5      x     50
>
> what I would like is to take the results of this query, and maintaining
> the order, only list x, y, z , AND
> not list any duplicates.
>
> So the result I'd want after getting this query would be:
>
> x     y     z
> ----------------
> 21    5    x
> 43   10    t
> 1      2    a
>
> So I'm pulling the results as they come along, and ignore any
> subsequent
> dupes.
>
> I don't know if this is even possible. I've tried combinations of
> SELECT
> DISTINCT, GROUP BY, and others
> with
> no luck. The best I could do was to do the order by in a subquery, then
> do a SELECT UNIQUE on the subquery.
> But that kills the order of the subquery. I've tried group by x,y,z but
> then I can't ORDER BY Q.
>
> - L
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster