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

Група по клауза в mySQL и postgreSQL, защо грешката в postgreSQL?

Трябва да използвате АГРЕГАТНА ФУНКЦИЯ :

Агрегатните функции изчисляват единичен резултат от набор от входни стойности.

SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table 
GROUP BY col2;

db<>демонстрация на цигулка

Обработка на MySQL на GROUP BY :

В стандартния SQL заявка, която включва клауза GROUP BY, не може да се отнася до неагрегирани колони в списъка за избор, които не са наименувани в клаузата GROUP BY

и:

MySQL разширява използването на GROUP BY, така че списъкът за избор може да се отнася до неагрегирани колони, които не са наименувани в клаузата GROUP BY. Това означава, че предходната заявка е законна в MySQL. Можете да използвате тази функция, за да постигнете по-добра производителност, като избягвате ненужното сортиране и групиране на колони. Това обаче е полезно преди всичко, когато всички стойности във всяка неагрегирана колона, която не е именувана в GROUP BY, са еднакви за всяка група. Сървърът е свободен да избира всяка стойност от всяка група, така че освен ако не са еднакви, избраните стойности са неопределени

Така че с версията на MySQL без изрична агрегатна функция може да се окажете с недетерминирани стойности. Силно препоръчвам да използвате специфична агрегатна функция.

РЕДАКТИРАНЕ:

От Обработка на MySQL на GROUP BY :

SQL92 и по-стари не позволяват заявки, за които списъкът за избор, условието HAVING или списъкът ORDER BY се отнасят до неагрегирани колони, които не са наименувани в клаузата GROUP BY.

SQL99 и по-нови позволяват такива неагрегирани елементи за опция T301 ако те са функционално зависими от колони GROUP BY: Ако съществува такава връзка между име и попечител, заявката е законна. Такъв би бил случаят, например, ако се пазят първичен ключ на клиентите.

Пример:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
  ON o.custid = c.custid
GROUP BY o.custid;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените размера на max_allowed_packet

  2. Изисква се за присъединяване на 2 маси с техните FK в 3-та маса

  3. Рекурсивни категории с една заявка?

  4. Как да изберете от MySQL, където името на таблицата е променлива

  5. JOIN заявки срещу множество заявки