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

Postgres:Fejl ved brug af GROUP BY og ORDER (på heroku)

Dit umiddelbare problem er, at du producerer ugyldig SQL til PostgreSQL:

SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC

Din ORDER BY matcher ikke resten af ​​din forespørgsel. Du kan ikke bruge en kolonne i en grupperet forespørgsel, medmindre den kolonne også er grupperet, eller hvis kolonnen vises i en samlet funktion, er det, hvad fejlmeddelelsen betyder. Årsagen er, at PostgreSQL ikke ved, hvilken række der er created_at at bruge, når en gruppe af rækker kombineres af GROUP BY-sætningen; nogle databaser vil bare lydløst vælge en række af sig selv, PostgreSQL foretrækker at være streng og vil have dig til at fjerne tvetydigheden selv.

Prøv selv at angive rækkefølgen:

@categories = Micropost.select("category").group("category").order("category")

En anden mulighed er at bruge DISTINCT i stedet for GROUP BY for at undgå dubletter:

@categories = Micropost.select('DISTINCT(category)')

BTW, du burde virkelig ikke gøre den slags ting i en visning, du vil måske flytte det til din controller.

Dit virkelige problem er, at du udvikler oven på én database, mens du implementerer på en anden. Jeg vil anbefale, at du skifter dit udviklingsmiljø til PostgreSQL 8.3 (hvis du implementerer til en Heroku delt database) eller PostgreSQL 9.0 (hvis du implementerer til en dedikeret database).



  1. Pivottabel ved hjælp af MySQL

  2. ORACLE SQL Group Ved STADIG at give dubletter

  3. Annuller aktuel/aktiv forespørgsel i Ruby on Rails

  4. Hvordan kan jeg bekræfte butikskoden i mysql og opdatere tabellen, hvis resultatet returnerer sandt