sql >> Database teknologi >  >> RDS >> PostgreSQL

PG::Fejl:SELECT DISTINCT, ORDER BY-udtryk skal vises i udvalgslisten

Jeg ved godt, at dette er et ret gammelt spørgsmål, men jeg har lige gennemgået et lille eksempel i mit hoved, som hjalp mig med at forstå, hvorfor Postgres har denne tilsyneladende mærkelige begrænsning på SELECT DISTINCT / ORDER BY kolonner.

Forestil dig, at du har følgende data i din Rsvp-tabel:

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

Nu vil du have fat i en liste over forskellige begivenheds-id'er, sorteret efter deres respektive starttider. Men hvor skal 1 gå? Skal den komme først, fordi den ene tuple starter den 1. januar 1970, eller skal den gå sidst på grund af den 21. august 2013?

Da databasesystemet ikke kan træffe den beslutning for dig, og syntaksen for forespørgslen ikke kan afhænge af de faktiske data, det muligvis opererer på (forudsat event_id er unik), er vi begrænset til kun at bestille efter kolonner fra SELECT klausul.

Hvad angår det faktiske spørgsmål - et alternativ til Matthews svar er at bruge en aggregeret funktion som MIN eller MAX til sorteringen:

  SELECT event_id
    FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
 

Den eksplicitte gruppering og aggregering på start_time tillade databasen at komme med en entydig rækkefølge af resultattupler. Bemærk dog, at læsbarheden bestemt er et problem i dette tilfælde;)



  1. Sådan eksporteres forespørgselsresultater til en CSV-fil i SQLcl (Oracle)

  2. Brug af HHVM med WordPress

  3. Slut dig til mig for en Microsoft Access med SQL Server Academy-session

  4. 2 måder at returnere rækker, der kun indeholder alfanumeriske tegn i PostgreSQL