@phpcoder81

Почему странно работают групповые функции?

Если сделать
SELECT `name`, MIN(`score`) FROM `tab`
то MIN вернет минимальное значение по всему столбцу таблицы.

Если же сделать
SELECT `name`, MIN(`score`) FROM `tab` GROUP BY `name`

то выводит данные по каждой строке

Вопросы у меня:
1. Правильно ли я понял, что функция MIN почти всегда пишется с GROUP BY?
2. Поле `name` на первом примере вообще своей жизнью живет. Возвращает первую попавшуюся запись в колонке.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 3
isset89
@isset89
Врёшь, тебе нравится
1. MIN ВСЕГДА пишется с GROUP BY. а также MAX
2. Поэтому и живет
Есть такая штука в мускле, которой можно отключить жесткий синтаксис написания запроса с использованием GROUP BY и запросы будут выполняться, но данные будут гулять. Если же включить ее, то выдаст ошибку. В случае
SELECT `name`, MIN(`score`) FROM `tab` - жесткий синтаксис выключен
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
Select * from tab order by score asc limit 1
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Если не указано условие группировки GROUP BY, а в выборке есть агрегатные функции (MIN, SUM, и т.п.), то делается группировка по всем выбранным в запросе строкам.
2. По стандарту, если используется группировка, то все поля выборки должны либо входить в условие GROUP BY, либо в агрегатные функции. MySQL начиная с версии 5.7.5 по умолчанию использует стандартное поведение. Для старого варианта (когда допускались любые поля) надо либо переопределить параметр ONLY_FULL_GROUP_BY, либо явно использовать агрегатную функцию ANY_VALUE(). То есть, ваш первый запрос на самом деле выглядит как SELECT ANY_VALUE(`name`), MIN(`score`) FROM `tab`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы