# 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 отображает ошибку выше. Не могли бы вы помочь мне с этим
 Marshall Tigerus21 июн. 2016 г., 20:19
он ожидает, что в группе есть оператор libelle, credit_initila и disponible_v
 Miloud BAKTETE11 июл. 2016 г., 13:35
проблема на самом mysql не запрос
 bishop21 июн. 2016 г., 20:20

Ответы на вопрос(8)

Решение Вопроса

чтобы заставить это работать, я проверил это, и он работает на сервере лампы 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

в конец файла

сохранить и выйти из режима вводаsudo service mysql restart перезапустить MySQL.

Готово!

 Henry12 сент. 2017 г., 07:19
Я добавил эти настройки в/etc/mysql/my.cnf
 Henry09 мая 2017 г., 07:14
Вы можете найти исходное значение, выполнив этот SQL перед тем, как изменить my.cnf:show global variables like 'sql_mode';
 Salman A20 апр. 2019 г., 18:38
Этот ответ неверен. Правильный ответ - исправить запрос.
 Radmation19 нояб. 2016 г., 20:48
Для тех, кто не может найти этот файл мой файл называлсяmy.ini такой же какmysql.cnf
 Salman A28 апр. 2019 г., 23:49
Ответы @deepcell ниже (медведь гризли и драп) дают правильное решение. К сожалению, большинство людей не будут прокручивать вниз.
 deepcell28 апр. 2019 г., 15:49
@SalmanA не стесняйтесь исправить запрос и представить его нам. кстати решение работает.
 Henry06 мая 2018 г., 02:18
Не путай[mysqld] с[mysql] как и я
 Henry06 мая 2018 г., 02:20
Рекомендуется проверить, что вы изменяете только один параметр, выполнив сначала этот оператор SQL:SELECT @@sql_mode;
 Grant25 авг. 2016 г., 22:21
Я решил ту же проблему, удалив только: STRICT_TRANS_TABLES из строки sql_mode = в /etc/mysql/my.cnf в Ubuntu 16.04 (MySQL 5.7) и перезапустив mysql: systemctl restart mysql
 Pragnesh Chaudhari29 авг. 2017 г., 09:32
Большое спасибо, мужчина. Это работало и для сервера Windows Wamp.
 Manish Goswami17 дек. 2016 г., 17:53
Это сработало для меня Большое спасибо @Baktete
 keithpjolley12 янв. 2017 г., 13:18
В документации есть информация о том, что здесь происходит:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html  И менее радикальный способ обойти, чем редактировать mysql.cnf (или просто исправить sql, как предложили gr1zzly be4r и scaisEdge):https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value
 Nikz09 мая 2017 г., 07:47
Большое спасибо мужик .. Это работает для Ubuntu

спользовать все неагрегированные столбцы в вашей группе:

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
 scaisEdge27 апр. 2017 г., 08:11
@fdsfdsfdsfds Это то, что заставляет вас делать это предложение. ONLY_FULL_GROUP_BY требует, чтобы все столбцы, которые не управляются функциями агрегации, были объявлены в группе с помощью ... это решение, предоставляемое OP, изменяет ONLY_FULL_GROUP_BY sql_mode, но это не sql правильно (также, если по умолчанию используется mysql до 5.7 по умолчанию)
 fdsfdsfdsfds27 апр. 2017 г., 08:04
это не имеет никакого смысла, если вы подсчитываете по некоторому идентификатору (индекс указывает на другую таблицу), то зачем вам нужно добавлять другие столбцы, которые не связаны с подсчетом в группе, особенно если вы не хотите группировать по этим столбцам

Вы можете отключить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';

Я попробовал это и работал на меня. Спасибо :)

 NeeruSingh04 янв. 2018 г., 09:32
спасибо, это тоже работает для меня
 Star26 мар. 2019 г., 14:21
если MySQL будет перезапущен, тогда проблема возникнет снова. так что это не постоянное исправление.

Решение 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. 

 Star26 мар. 2019 г., 14:21
если MySQL будет перезапущен, тогда проблема возникнет снова. так что это не постоянное исправление.
 hakamairi28 июн. 2018 г., 15:01
Привет Tauqueer, Пожалуйста, отформатируйте строку mysql как код. Также вам не хватает ссылки на дополнительный материал для чтения.

NOT IN group by пункт.

Итак, есть два варианта ...Добавить Credit_Initial а такжеDisponible_v кgroup by

ИЛИ ЖЕ

Измените их наMAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v если вы знаете, что значения являются постоянными в любом случае и не имеют никакого другого влияния.

которые вы не используете для функции агрегирования в вашемGROUP BY пункт, как это:

select libelle,credit_initial,disponible_v,sum(montant) as montant 
FROM fiche,annee,type where type.id_type=annee.id_type and an,nee.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 и выше реализует обнаружение функциональной зависимости. Если включен режим SQL ONLY_FULL_GROUP_BY (который по умолчанию), MySQL отклоняет запросы, для которых список выбора, условие HAVING или список ORDER BY ссылаются на неагрегированные столбцы, которые не названы в предложении GROUP BY и функционально не зависят от них. , (До версии 5.7.5 MySQL не обнаруживает функциональную зависимость, и ONLY_FULL_GROUP_BY не включен по умолчанию. Описание поведения до версии 5.7.5 см. В справочном руководстве MySQL 5.6.)

Вы получаете ошибку, потому что вы находитесь на версии <5.7.5

 Miloud BAKTETE22 июн. 2016 г., 21:34
Я на Ubuntu MySQL 5.7.12 любой другой доступный вариант, потому что у меня есть другие запросы, мне нужно, как превратить только полную группу из
 Mohd Abdul Mujib20 июн. 2018 г., 00:38
Это реальное решение, если вы сейчас пишете свою логику БД, поскольку это сделает ваш код более точным и уменьшит большую неопределенность в ваших выходных данных.

Это сработало для меня:

mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Возможно, вам понадобится sudo для первого шага:

sudo mysql -u root -p
 Murali14 мая 2017 г., 16:56
спасибо. Это работает как Chram
 Henry09 мая 2017 г., 07:13
Я пришел к выводу, что это решение сохраняется только до перезапуска mysql. Принятое решение лучше.
 Xoundboy23 февр. 2017 г., 19:27
в конце концов это было единственное, что работало для меня тоже
 Star26 мар. 2019 г., 14:22
если MySQL будет перезапущен, тогда проблема возникнет снова. так что это не постоянное исправление.
 Kevin_Kinsey18 мая 2017 г., 21:31
Генри, преимущество этого подхода в том, что его можно применять избирательно. Если вы измените my.cnf, это повлияет на каждое приложение и базу данных на сервере. OTOH, если приложение / учетная запись имеет привилегии для SET GLOBAL (что не гарантировано, но может быть реализовано), вы можете запустить этот запрос из приложения на этапе подготовки БД перед выполнением других запросов. Это спасло мой бекон с помощью устаревшего устаревшего приложения, которое нарушило FULL_ORDER_GROUP_BY ... Я просто вызываю это, как только соединение с БД инициализируется ...

нажмите на значок wamp, нажмите mysql-> my.ini, тогда есть опция; sql-mode = "" раскомментируйте это, сделайте это как sql-mode = "", и перезапустите wamp, который работал для меня

Ваш ответ на вопрос