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

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

Ако user_id е ПЪРВИЧНИЯ КЛЮЧ след това трябва да надстроите PostgreSQL; по-новите версии ще обработват правилно групирането по първичен ключ.

Ако user_id не е нито уникни първичния ключ за въпросната релация „имоти“, тогава тази заявка няма особен смисъл, тъй като PostgreSQL няма начин да разбере кои стойност, която да се върне за всяка колона от estates където няколко реда споделят един и същ user_id . Трябва да използвате агрегатна функция, която изразява това, което искате, като min , max , avg , string_agg , array_agg , и т.н. или добавете колоната(ите) от интерес към GROUP BY .

Като алтернатива можете да префразирате заявката, за да използвате DISTINCT ON и ORDER BY ако наистина искате да изберете донякъде произволен ред, макар че наистина се съмнявам, че е възможно да се изрази това чрез ActiveRecord.

Някои бази данни - включително SQLite и MySQL - просто ще изберат произволен ред. Това се счита за неправилно и опасно от екипа на PostgreSQL, така че PostgreSQL следва SQL стандарта и счита такива заявки за грешки.

Ако имате:

col1    col2
fred    42
bob     9
fred    44
fred    99

и вие правите:

SELECT col1, col2 FROM mytable GROUP BY col1;

тогава е очевидно, че трябва да получите реда:

bob     9

но какво да кажем за резултата за fred ? Няма единствен правилен отговор за избор, така че базата данни ще откаже да изпълни такива опасни заявки. Ако искате най-голямото col2 за произволен col1 бихте използвали max съвкупност:

SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се ИЗБИРА от клауза UPDATE RETURNING в postgres

  2. Oracle към PostgreSQL — Курсори и ltrees

  3. PostgreSQL v13 Разгръщане и мащабиране с ClusterControl 1.8.2

  4. Как да свържете две таблици в поле за външен ключ, използвайки django ORM?

  5. SQL INSERT без посочване на колони. Какво става?