SELECT DISTINCT ON ... ORDER BY ...

From: Thomas Metz <tmetz(at)gsf(dot)de>
To: pgsql-sql(at)hub(dot)org
Subject: SELECT DISTINCT ON ... ORDER BY ...
Date: 1999-01-28 13:01:03
Message-ID: 36B05F8F.DFB94ED8@gsf.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I have the following problem:

Assuming the table TEST as follows:

ID NAME
-----------------
1 Alex
2 Oliver
1 Thomas
2 Fenella

SELECT DISTINCT ON id id, name FROM test;
produces:

ID NAME
-----------------
1 Alex
2 Oliver

SELECT DISTINCT ON id, name FROM test ORDER BY name;
produces:

ID NAME
-----------------
1 Alex
2 Fenella
1 Thomas

I would have expected only two rows in both queries. I don't care which
names actually appear in the output as long as they are sorted, but
there should no longer be duplicate id's.

If the table is as follows:

ID NAME
-----------------
2 Oliver
2 Alex
1 Thomas
1 Fenella

SELECT DISTINCT ON id id, name FROM test;
produces:

ID NAME
-----------------
1 Thomas
2 Oliver

SELECT DISTINCT ON id, name FROM test ORDER BY name;
produces:

ID NAME
-----------------
2 Alex
1 Fenella
2 Oliver
1 Thomas

What seems to happen is that from the sorted table, duplicate id's are
eliminated only if they are grouped. If there is no explicit sorting I
assume the DISTINCT performs an implicit sorting on id and then
eliminates records correctly. Is that the correct behaviour? Is there
another (simple) way of getting the results I want?

I am still using version 6.3

tm
--
Thomas Metz
GSF - National Research Center for Environment and Health
Institute of Mammalian Genetics

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Sergei M. Suntsov 1999-01-28 13:09:30 Re: [SQL] SELECT DISTINCT ON ... ORDER BY ...
Previous Message Marcus Better 1999-01-28 10:49:41 Re: [SQL] Serial numbers