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
.