Vím, že je to poměrně stará otázka, ale právě jsem si v hlavě prošel malý příklad, který mi pomohl pochopit, proč má Postgres toto zdánlivě zvláštní omezení na sloupce SELECT DISTINCT / ORDER BY.
Představte si, že máte v tabulce RSVP následující data:
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
Nyní chcete získat seznam odlišných id_událostí seřazených podle jejich příslušných časů zahájení. Ale kde má být 1
jít? Měl by být první, protože jedna n-tice začíná 1. ledna 1970, nebo by měl být poslední kvůli 21. srpnu 2013?
Protože databázový systém nemůže učinit toto rozhodnutí za vás a syntaxe dotazu nemůže záviset na skutečných datech, se kterými může pracovat (za předpokladu event_id
je unikátní), jsme omezeni na objednávání pouze podle sloupců z SELECT
doložka.
Pokud jde o skutečnou otázku - alternativou k Matthewově odpovědi je použití agregační funkce jako MIN
nebo MAX
pro třídění:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
Explicitní seskupení a agregace v start_time
umožňují databázi přijít s jednoznačným řazením výsledných n-tic. Všimněte si však, že čitelnost je v tomto případě rozhodně problém;)