Това е често срещана грешка за потребителите на 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)
също ще работи.
Вижте също предишните ми отговори за същата грешка: