Группировка и анализ записей таблиц базы данных представляют практический интерес во многих областях применения. Решение такого рода задач средствами MySQL позволяет выполнить большие объёмы рутинной работы быстро и эффективно.
Следует, однако, иметь в виду: «чистота», получаемого результата будет зависеть от множества факторов. Конструкция MySQL group by исполняется так, как записано программистом, но алгоритм её может зависеть от времени исполнения запроса и частоты выборки.
Синтаксис операции группировки в запросе
При составлении запроса на группировку имеет существенное значение что именно выбирается и как оно группируется. Исходная таблица содержит небольшое количество полей, каждое из которых имеет различное количество уникальных записей. Поля i_status и w_status эквивалентны: первое - код должности, второе - её наименование. Поле номера записи и времени создания записи не имеют особого значения.
На таком наборе можно выполнить групповые операции, например определить максимальное и минимальное значение поля start_timestamp.
Аналогично можно сформулировать групповой запрос и определить все должности и количество людей, занятых на них.
Соотношение MySQL: group by & order by прослеживается на запросах (i) и (iv), запросы (ii) и (iii) эквивалентны. Но в любой конкретной ситуации следует продумать, как выполнять сортировку при выполнении операции группировки. В некоторых случаях это может составлять проблему.
Подсчёт количества группируемых записей - важный момент при группировке. данная операция, в основном используется именно для этих целей, хотя её использование для определения различных строк в таблице в некотором роде удобнее, в отличие от конструкции distinct.
Группировка по объему вхождения
Следует обратить внимание, что MySQL group by не всегда сработает против MySQL order by. Вопрос не столько в приоритетах конструкций, сколько в логике самого запроса.
Запрос может быть сформулирован как выражение. В самом простом случае выражение может состоять в подсчёте количества. То есть применение в MySQL group by, count(*) - в качестве выражения, по которому выполняется группировка.
Здесь сортировка по возрастанию имеет значение та, которая указана в order by.
Язык MySQL не ограничивает программиста в конструировании выражений, указании полей, которые не участвуют в группировке, последовательности группируемых элементов. Но MySQL group by может не сработать так, как считает правильным программист.
Множественная группировка
Можно группировать что угодно и как угодно, но всегда следует стремиться к минимизации количества используемых полей.
MySQL group by - очень удобная операция на повторяющихся данных, с её помощью легко можно получить нужную информацию, но если в запросе происходит группировка нескольких полей целесообразно рассмотреть иные варианты построения запроса.
Следует принимать во внимание, что конструкции group by и order by язык MySQL рассматривает как простую «арифметику» над записями. Для ответственных операций группировки предназначены варианты встроенных запросов, разумное применение ключей, объединение и пересечение таблиц.
Группировка в контексте MySQL group by - это быстрое получение обобщённой информации, не следует нагружать запросы с этой конструкцией более глубоким смыслом. Это может привести к непредсказуемым результатам и серьёзным затратам времени.