PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

GroupingError:ERROR:колоната трябва да се появи в клаузата GROUP BY или да се използва в агрегатна функция

Не можете да комбинирате SELECT * с GROUP BY some_column в Postgres (освен ако some_column е PK), защото това е противоречие. Всички неагрегирани колони (използвани в SELECT , HAVING или ORDER BY клауза извън агрегатна функция) трябва да бъде в GROUP BY списък - където колоната с първичен ключ може да замени всички колони на таблица. В противен случай не е дефинирано кое стойност, която да изберете от обобщения набор.

По документация:

Когато GROUP BY е налице или има агрегатни функции, не е валидно за SELECT списъчни изрази, които да се отнасят до негрупирани колони, освен в рамките на агрегатни функции или когато негрупираната колона е функционално зависима от групираните колони, тъй като в противен случай би имало повече от една възможна стойност за връщане за негрупирана колона. Съществува функционална зависимост, ако групираните колони (или подмножество от тях) са първичният ключ на таблицата, съдържаща негрупираната колона.

Известно е, че някои други RDBMS играят мръсни номера тук и позволяват това и избират произволни стойности...

Изглежда искате списък с уникални пациенти, които са коментирали, с най-новите коментирайте всеки. Най-простият начин в Postgres е с DISTINCT ON :

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

Но това няма да върви със SQLite - което не трябва да е в цикъла за начало:

  • Общо решение на Ruby за SQLite3 „LIKE“ или PostgreSQL „ILIKE“?

NULLS LAST е подходящ само ако created_at може да бъде NULL:

  • PostgreSQL сортиране по datetime asc, първо нула?

Подробности за DISTINCT ON :

  • Изберете ли първия ред във всяка група 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. Някои идеи за обединяване на ресурси на ниско ниво в PostgreSQL

  2. Инсталиране на PostgreSQL в Ubuntu за Ruby on Rails

  3. Как да вмъкнете CSV данни в PostgreSQL база данни (отдалечена база данни)

  4. PostgreSQL бавен на голяма таблица с масиви и много актуализации

  5. Как да извършите едно и също агрегиране на всяка колона, без да изброявате колоните?