PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

GroupingError:ERROR:kolumna musi występować w klauzuli GROUP BY lub być używana w funkcji agregującej

Nie można połączyć SELECT * z GROUP BY some_column w Postgresie (chyba że some_column jest PK), bo to sprzeczność. Wszystkie niezagregowane kolumny (używane w SELECT , HAVING lub ORDER BY klauzula poza funkcją agregującą) musi znajdować się w GROUP BY list - gdzie kolumna klucza podstawowego może zastąpić wszystkie kolumny tabeli. W przeciwnym razie jest niezdefiniowane, które wartość do wybrania z zagregowanego zestawu.

Zgodnie z dokumentacją:

Kiedy GROUP BY jest obecny lub istnieją jakiekolwiek funkcje agregujące, nie jest prawidłowy dla SELECT listy wyrażeń odwołujących się do niezgrupowanych kolumn, z wyjątkiem funkcji agregujących lub sytuacji, gdy niezgrupowana kolumna jest funkcjonalnie zależna od zgrupowanych kolumn, ponieważ w przeciwnym razie dla niezgrupowanej kolumny mogłaby zostać zwrócona więcej niż jedna wartość. Zależność funkcjonalna istnieje, jeśli zgrupowane kolumny (lub ich podzbiór) są kluczem podstawowym tabeli zawierającej niezgrupowaną kolumnę.

Pewne inne RDBMS płatają tutaj brudne sztuczki i pozwalają na to i wybierają dowolne wartości...

Wygląda na to, że potrzebujesz listy unikalnych pacjentów, którzy skomentowali, z najnowszym skomentuj każdy. Najprostszym sposobem w Postgresie jest DISTINCT ON :

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

Ale to nie zadziała z SQLite - co nie powinno być w pętli od początku:

  • Ogólne rozwiązanie Ruby dla SQLite3 „LIKE” lub PostgreSQL „ILIKE”?

NULLS LAST ma znaczenie tylko wtedy, gdy created_at może być NULL:

  • PostgreSQL sortuje według daty i godziny asc, najpierw null?

Szczegóły dla DISTINCT ON :

  • Wybrać pierwszy wiersz w każdej grupie GROUP BY?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problemy z połączeniem z SQLAlchemy i wieloma procesami

  2. Zwiększanie wydajności PostgreSQL dzięki HAProxy

  3. Przegląd kompilacji Just-in-Time (JIT) dla PostgreSQL

  4. ScaleGrid PostgreSQL w infrastrukturze chmury VMware

  5. W mojej bazie danych PostgreSQL brakuje miejsca na dysku