SELECT DISTINCT ON ... ORDER BY ...

Поиск
Список
Период
Сортировка
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

В списке pgsql-sql по дате отправления:

Предыдущее
От: Marcus Better
Дата:
Сообщение: Re: [SQL] Serial numbers
Следующее
От: "Sergei M. Suntsov"
Дата:
Сообщение: Re: [SQL] SELECT DISTINCT ON ... ORDER BY ...