09-06-2018 12:13

Группировка записей MySQL: group by

Группировка и анализ записей таблиц базы данных представляют практический интерес во многих областях применения. Решение такого рода задач средствами MySQL позволяет выполнить большие объёмы рутинной работы быстро и эффективно.

Следует, однако, иметь в виду: «чистота», получаемого результата будет зависеть от множества факторов. Конструкция MySQL group by исполняется так, как записано программистом, но алгоритм её может зависеть от времени исполнения запроса и частоты выборки.

Синтаксис операции группировки в запросе

Программирование на Python: списокВам будет интересно:Программирование на Python: список

При составлении запроса на группировку имеет существенное значение что именно выбирается и как оно группируется. Исходная таблица содержит небольшое количество полей, каждое из которых имеет различное количество уникальных записей. Поля 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 - это быстрое получение обобщённой информации, не следует нагружать запросы с этой конструкцией более глубоким смыслом. Это может привести к непредсказуемым результатам и серьёзным затратам времени.



Источник