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

Какви са предимствата на режима only_full_group_by?

only_full_group_by =включено казва на двигателя на MySQL:Не прилагайте GROUP BY когато се съмнявате какви резултати да покажете и изведете грешка. Само приложи го, ако Group By конкретно ви казва какво да правите. т.е. когато Group By е пълен и перфектен!

only_full_group_by =изключено казва на двигателя на MySQL:винаги прилагайте GROUP BY и ако се съмнявате какви резултати да изберете, просто изберете един на случаен принцип!

Не е нужно да го изключвате, ако използвате GROUP BY правилно!

Пример:

Таблица:потребители

 id   |  name
----------------
  1      ali
  2      john
  3      ali

Когато използвате GROUP BY на name колона:

SELECT * FROM users GROUP BY name;

Има два възможни резултата:

  1      ali
  2      john     

ИЛИ

  2      john     
  3      ali

MYSQL не знае какъв резултат да избере! Тъй като има различни id s, но и двете имат name=ali .

Решение 1:

само избиране на name поле:

SELECT name FROM users GROUP BY name;

резултат:

  ali
  john     

Това е идеално решение. премахване на колони, което прави GROUP BY объркан. Това означава, че знаете какво правите. Обикновено не се нуждаете от
тези колони, но ако имате нужда от тях, отидете на Решение 3 !

Решение 2:

Изключване на only_full_group_by . MYSQL ще избере един от двата възможни резултата СЛУЧАЙНО !! (Добре е, ако наистина не ви пука какъв id ще избере, но не забравяйте да го включите веднага след вашата заявка, за да предотвратите неочаквано поведение в бъдещи groupBys)

Решение 3

Използвайте Aggregate функция като MIN() , MAX() за да помогне на MYSQL да реши какво трябва да избере.

Например:

SELECT MAX(id), name FROM users GROUP BY name;

резултат:

  2      john     
  3      ali

Той ще избере ali ред, който има максимален id .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изберете от една таблица и вмъкнете в друга

  2. SQL за намиране на най-популярната категория

  3. Cronjob или MySQL събитие?

  4. Как мога да видя съдържанието на подготвено изявление?

  5. Laravel се присъединява с 3 таблици