Групування й аналіз записів таблиць бази даних представляють практичний інтерес у багатьох областях застосування. Рішення такого роду задач засобами 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 - це швидке отримання узагальненої інформації, не слід навантажувати запити з цією конструкцією більш глибоким змістом. Це може призвести до непередбачуваних результатів і серйозних витрат часу.