Прежде всего, вы можете / должны (в зависимости от конфигурации MySQL) выбирать и упорядочивать только по столбцам, которые являются частью вашего предложения group by
.Для всех остальных столбцов необходимо указать функцию агрегирования .Например, допустим, у вас есть две записи о людях, у которых одинаковое имя и разный возраст.Когда вы группируете по имени, вы должны выбрать одно из двух значений возраста (максимальный, минимальный, средний, ...).Если вас это не волнует, вы можете отключить режим sql only full group by
.Однако я бы не советовал.
Чтобы получить одну запись с каким-то максимальным значением, однако, группировка по не является правильным подходом.Взгляните на эти примеры:
Подвыбрать:
SELECT name, age, ...
FROM humans
WHERE age=(SELECT MAX(age) FROM humans);
Сортировать по и ограничить:
SELECT name, age, ...
FROM humans
ORDER BY age DESC
LIMIT 1;
Оставить соединение:
SELECT name, age, ...
FROM humans h1
LEFT JOIN humans h2 ON h1.age < h2.age
WHERE h2.age IS NULL;
Теперь, если вы хотите все максимальное количество строк на группу , отметьте один из этих ответов с тегом наибольшее-n-на-группу .