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

Как да коригирате групата заявки с only_full_group_by

Това е често срещана грешка за потребителите на MySQL. В MySQL 5.7 по подразбиране базата данни налага стандартната семантика, която повечето други SQL бази данни прилагат от години.

Правилото е, че всяка колона във вашия списък за избор трябва да бъде една от:

  • Именува се в клаузата GROUP BY; т.е. това е това, което групирате.
  • Вътре в агрегатна функция като MIN, MAX(), SUM(), GROUP_CONCAT() и т.н.
  • Функционално зависи от колоната, по която групирате (това е разширение на MySQL към стандартното поведение на SQL и други SQL бази данни не поддържат непременно това).

Във вашата заявка (ще разширя вашия SELECT * ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Групирате по Feature_key, но това означава, че другите колони не отговарят на правилата, които описах по-горе.

Ето начин да го поправите:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Може да изглежда излишно да използвате MAX(user_id) тъй като има само една възможна стойност въз основа на условието на клаузата WHERE. Но и няма вреда. MIN(user_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. Неочаквано достигане на ограничението на паметта на PHP с една PDO заявка?

  2. Как мога да сумирам колони в множество таблици в MySQL?

  3. MySQLdb.cursor.execute не може да изпълнява множество заявки

  4. Как да вляза в MySQL като различен потребител?

  5. по-добър подход от съхраняването на mysql парола в обикновен текст в конфигурационния файл?