Обсуждение: distinct on doesn't fail without order by? why?

Поиск
Список
Период
Сортировка

distinct on doesn't fail without order by? why?

От
hubert depesz lubaczewski
Дата:
I was under impression that select distinct on (xx) ...
will fail if xx doesn't match the left most part of order by. i.e. it
requires order by xx, while allowing order by xx, something, else.

But it seems you can run the query with no order by clause at all.

is it intentional?

# select distinct on (x) x, y from test;
 x | y
---+---
 1 | 2
 2 | 3
(2 rows)

# select * from test;
 x | y
---+---
 1 | 2
 2 | 3
 1 | 4
(3 rows)

Best regards,

depesz

--
Linkedin: http://www.linkedin.com/in/depesz  /  blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007

Re: distinct on doesn't fail without order by? why?

От
Jeff Davis
Дата:
On Mon, 2009-05-18 at 20:24 +0200, hubert depesz lubaczewski wrote:
> I was under impression that select distinct on (xx) ...
> will fail if xx doesn't match the left most part of order by. i.e. it
> requires order by xx, while allowing order by xx, something, else.
>
> But it seems you can run the query with no order by clause at all.
>
> is it intentional?

This is documented behavior:

"Note that the 'first row' of each set is unpredictable unless ORDER BY
is used to ensure that the desired row appears first."

http://www.postgresql.org/docs/8.4/static/sql-select.html#SQL-DISTINCT

Regards,
    Jeff Davis

Re: distinct on doesn't fail without order by? why?

От
Tom Lane
Дата:
hubert depesz lubaczewski <depesz@depesz.com> writes:
> I was under impression that select distinct on (xx) ...
> will fail if xx doesn't match the left most part of order by. i.e. it
> requires order by xx, while allowing order by xx, something, else.

No, it requires that *if* you specify an ORDER BY, it agrees with
the DISTINCT ON.

            regards, tom lane