Знам, че това е доста стар въпрос, но току-що минах през малък пример в главата си, който ми помогна да разбера защо Postgres има това на пръв поглед странно ограничение за SELECT DISTINCT / ORDER BY колони.
Представете си, че имате следните данни във вашата Rsvp таблица:
event_id | start_time
----------+------------------------
0 | Mar 17, 2013 12:00:00
1 | Jan 1, 1970 00:00:00
1 | Aug 21, 2013 16:30:00
2 | Jun 9, 2012 08:45:00
Сега искате да вземете списък с различни идентификатори на event_id, подредени по съответните им start_times. Но къде трябва 1
отивам? Трябва ли да е на първо място, защото единственият кортеж започва на 1 януари 1970 г., или трябва да е последен заради 21 август 2013 г.?
Тъй като системата на базата данни не може да вземе това решение вместо вас и синтаксисът на заявката не може да зависи от действителните данни, с които може да работи (при условие, че event_id
е уникален), ние сме ограничени до подреждане само по колони от SELECT
клауза.
Що се отнася до действителния въпрос - алтернатива на отговора на Матю е използването на агрегатна функция като MIN
или MAX
за сортиране:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
Изричното групиране и агрегиране в start_time
позволява на базата данни да излезе с недвусмислено подреждане на кортежите с резултати. Имайте предвид обаче, че четливостта определено е проблем в този случай;)