Відмінності між версіями «Group by»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
(Створено шляхом перекладу сторінки «GROUP BY»)
(Немає відмінностей)

Версія за 10:41, 5 січня 2017

GROUP BYсинтаксична конструкція мови SQL для агрегації записів, вибраних за допомогою запиту SELECT.

Приклад використання

Нехай є таблиця статей, для кожної з яких з-поміж іншого зберігається рік їх написання. Потрібно отримати огляд того, скільки статей було написано кожного року.

SELECT rok,Count(*) FROM clanky GROUP BY rok;

Результат може бути таким:

+------+----------+
| year | count(*) |
+------+----------+
| 2006 |        7 |
| 2007 |       15 |
| 2008 |       22 |
+------+----------+

Інші можливості

GROUP BY та агрегатні функції

Див. також: [[Агрегатна функція
]]
Використання GROUP BY дозволяє оголошувати агрегатні функції. Найчастіше використовується для підрахунку кількості записів, відповідних кожному значенню іншого стовпця (у вищенаведеному прикладі року), часто також суми, середнього арифметичного та інших статистичних оцінок вибраних записів.

HAVING

Див. також: [[Having (SQL)
]]
У випадках, коли вибірку з GROUP BY необхідно додатково обмежити, а використовувати оператор WHERE не можна, оскільки він не працює з агрегатними функціями, необхідно використовувати спеціальне ключове слово HAVING, яке дозволяє задавати умови над агрегатними функціями.

WITH ROLLUP

Деякі системи керування базами даних (наприклад, MySQL) підтримують конструкцію WITH ROLLUP, що вживається з оператором GROUP BY. Запит із конструкцією WITH ROLLUP поверне, згідно зі стандартом, рядки зі значенням NULL у тих стовпцях, відповідно до яких дані агрегуються (якщо вказані), а на місці значень агрегатних функцій — результати цих функцій для всіх рядків — наприклад, для кількості (count) це кількість усіх входжень, для суми (sum) — загальна сума і т.д.

Для вищенаведеного прикладу запиту

SELECT rok,Count(*) FROM clanky GROUP BY rok WITH ROLLUP;

результат буде схожий на:

+------+----------+
| year | count(*) |
+------+----------+
| 2006 |        7 |
| 2007 |       15 |
| 2008 |       22 |
| NULL |       44 |
+------+----------+

Значення NULL в останньому рядку представляє загальний показник за всі роки. Агрегованих стовпців або виразів може бути й більше — тоді результатний набір міститиме значення NULL із загальною сумою у зворотньому порядку, крім зазначених в операторі GROUP BY.