sql >> Databasteknik >  >> RDS >> PostgreSQL

GroupingError:ERROR:kolumnen måste visas i GROUP BY-satsen eller användas i en aggregerad funktion

Du kan inte kombinera SELECT * med GROUP BY some_column i Postgres (om inte some_column är PK), eftersom det är en motsägelse. Alla icke aggregerade kolumner (används i SELECT , HAVING eller ORDER BY sats utanför en aggregatfunktion) måste finnas i GROUP BY lista - där primärnyckelkolumnen kan ersätta alla kolumner i en tabell. Annars är det odefinierat vilket värde att välja från den aggregerade uppsättningen.

Per dokumentation:

När GROUP BY är närvarande, eller några aggregerade funktioner är närvarande, är det inte giltigt för SELECT listuttryck för att hänvisa till ogrupperade kolumner förutom inom aggregerade funktioner eller när den ogrupperade kolumnen är funktionellt beroende av de grupperade kolumnerna, eftersom det annars skulle finnas mer än ett möjligt värde att returnera för en ogrupperad kolumn. Ett funktionellt beroende existerar om de grupperade kolumnerna (eller en delmängd därav) är den primära nyckeln i tabellen som innehåller den ogrupperade kolumnen.

En viss annan RDBMS är känd för att spela smutsiga trick här och tillåta detta och välja godtyckliga värden...

Du verkar vilja ha en lista över unika patienter som har kommenterat, med det senaste kommentera var och en. Det enklaste sättet i Postgres är med DISTINCT ON :

SELECT DISTINCT ON (patient_id) *
FROM   comments
WHERE  clinician_id = $1
ORDER  BY patient_id, created_at DESC NULLS LAST;

Men detta kommer inte att flyga med SQLite - som inte borde vara i slingan till att börja med:

  • Generisk Ruby-lösning för SQLite3 "LIKE" eller PostgreSQL "ILKE"?

NULLS LAST är endast relevant om created_at kan vara NULL:

  • PostgreSQL sortera efter datetime asc, null först?

Detaljer för DISTINCT ON :

  • Välj första raden i varje GROUP BY-grupp?



  1. Lagra bild till databas blob; hämta från db till Picturebox

  2. Vad är MySQL Workbench?

  3. Hur man släpper en tabell i SQL

  4. Kan jag skapa vy med parameter i MySQL?