# 1055 - Выражение списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец, это несовместимо с sql_mode = only_full_group_by
мой запрос:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
- Mysql 5.7.9 запускает запрос без проблем, но MySQL 5.7.12 отображает ошибку выше. Не могли бы вы помочь мне с этим
Ответы
Ответ 1
У меня была проблема с тем, чтобы заставить это работать, я проверил это, и это работает на ламповом сервере MySQL версии 5.12
Итак, шаги к успеху:
-
sudo vim/etc/mysql/conf.d/mysql.cnf
-
Прокрутите до конца файла Копировать и вставить
[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
в конец файла
- сохранить и выйти из режима ввода
- перезапустить MySQL
sudo service mysql restart
чтобы перезапустить MySQL.
Готово!
Ответ 2
Это сработало для меня:
mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Вам может понадобиться sudo для первого шага:
sudo mysql -u root -p
Ответ 3
Вам нужно указать все столбцы, которые вы не используете для функции агрегации, в вашем предложении GROUP BY
следующим образом:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc
Режим full_group_by
в основном заставляет вас писать больше идиоматического SQL. Вы можете отключить эту настройку, если хотите. Существуют различные способы сделать это, описанные в Документация MySQL. Здесь MySQL определение того, что я сказал выше:
MySQL 5.7.5 и выше реализует обнаружение функциональной зависимости. Если включен режим ONLY_FULL_GROUP_BY SQL (который по умолчанию), MySQL отклоняет запросы, для которых выбранный список, условие HAVING или Список ORDER BY относится к неагрегированным столбцам, которые не называются в предложение GROUP BY и функционально зависит от них. (До 5.7.5, MySQL не обнаруживает функциональную зависимость, а ONLY_FULL_GROUP_BY не включен по умолчанию. Описание пред-5.7.5, см. Справочное руководство по MySQL 5.6.)
Вы получаете ошибку, потому что у вас есть версия < 5.7.5
Ответ 4
Вы можете отключить
sql_mode = only_full_group_by
по какой-либо команде вы можете попробовать это с помощью терминала или MySql IDE
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Я пробовал это и работал на меня.
Спасибо:)
Ответ 5
Решение 1. Удалите ONLY_FULL_GROUP_BY из консоли MySQL
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Вы можете прочитать больше здесь
Решение 2. Удалите ONLY_FULL_GROUP_BY из phpmyadmin
Open phpmyadmin & select localhost
Click on menu Variables & scroll down for sql mode
Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save.
![click here to see image]()
Ответ 6
Вам нужно агрегировать все NOT IN
предложение group by
.
Итак, есть два варианта: Добавить Credit_Initial и Disponible_v в group by
ИЛИ
Измените их на MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v
, если вы знаете, что значения постоянны и не имеют никакого другого влияния.
Ответ 7
Base ond defualt config из 5.7.5 ONLY_FULL_GROUP_BY
Вы должны использовать весь столбец без агрегата в своей группе
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type
where type.id_type=annee.id_type
and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp)
GROUP BY libelle,credit_initial,disponible_v order by libelle asc
Ответ 8
То же самое происходит и с 8. 0+ версиями. По умолчанию в версии 8. 0+ он "включен" по умолчанию. Вот ссылка на официальный документ ссылка
В случае версий 5. 6+, 5. 7+ свойство "ONLY_FULL_GROUP_BY" по умолчанию отключено.
Чтобы отключить его, выполните те же действия, которые предлагает @Miloud BAKTETE.
Ответ 9
просто перейдите в нижний лоток окна, нажмите значок wamp, выберите mysql- > my.ini, тогда есть опция; sql-mode = " "раскомментируйте это, сделайте это как sql-mode =" "
и перезапустить wamp
работал у меня