Подтвердить что ты не робот

# 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 отображает ошибку выше. Не могли бы вы помочь мне с этим
4b9b3361

Ответ 1

У меня была проблема с тем, чтобы заставить это работать, я проверил это, и это работает на ламповом сервере MySQL версии 5.12

Итак, шаги к успеху:

  1. sudo vim/etc/mysql/conf.d/mysql.cnf
  2. Прокрутите до конца файла Копировать и вставить

    [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

в конец файла

  1. сохранить и выйти из режима ввода
  2. перезапустить 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 работал у меня