Оператор GROUP BY використовується для групування рядків по одному або декільком стовпцям. Наприклад:
|
1 2 3 |
SELECT country, COUNT(*) AS number FROM Customers GROUP BY country; |
Тут ми групуємо рядки по стовпцю country та підраховуємо кількість записів для кожної країни (використовуючи функцію COUNT()).
Примітка: Оператор GROUP BY використовується у поєднанні з агрегатними функціями, такими як MIN(), MAX(), SUM(), AVG(), COUNT() та ін.

Ім’я стовпця виконання функції COUNT(*) — number, через використання псевдоніма (оператор AS).
Розглянемо інший приклад. Спробуємо знайти загальну суму замовлень для кожного клієнта:
|
1 2 3 |
SELECT customer_id, SUM(amount) AS total FROM Orders GROUP BY customer_id; |
Тут ми сумуємо значення стовпця amount після групування рядків за ідентифікатором customer_id.

Оператор GROUP BY з JOIN в SQL
Ми також можемо використовувати оператор GROUP BY з операторами JOIN. Наприклад:
|
1 2 3 4 5 |
SELECT Customers.customer_id, Customers.first_name, Count(Orders.order_id) AS order_count FROM Customers LEFT JOIN Orders ON Customers.customer_id = Orders.customer_id GROUP BY Customers.customer_id; |
Тут ми об’єднуємо таблиці Customers та Orders, а потім групуємо результат по полю customer_id. Це дозволяє нам дізнатися кількість замовлень, розміщених кожним клієнтом.
Оператор GROUP BY з декількома стовпцями
Оператор GROUP BY також можна використовувати для групування рядків на основі декількох стовпців. Наприклад:
|
1 2 3 |
SELECT country, state, MIN(age) as min_age FROM Persons GROUP BY country, state; |
Тут ми групуємо всіх людей з однаковою країною (country) та штатом (state) та вказуємо найменший вік (age) людини у кожній групі.
Оператор GROUP BY з оператором HAVING
Ми можемо використовувати оператор GROUP BY з оператором HAVING для фільтрації даних на основі агрегатних функцій. Наприклад:
|
1 2 3 4 |
SELECT COUNT(customer_id), country FROM Customers GROUP BY country HAVING COUNT(customer_id) > 1; |
Тут ми підраховуємо кількість клієнтів (customer_id), групуючи їх за країнами (country), а потім повертаємо результат за умови, що на кожну країну є більше 1 клієнта.

(21 оцінок, середня: 4,90 з 5)
Не знаю як в інших СУБД, але в MS SQL такий запит навряд чи виконається. Бо в select ми можемо вивести або агрегативну функцію, або ключі, які знаходяться в GROUP BY. Тобто Customers.customer_id та Count(Orders.order_id) AS order_count воно покаже, проте на Customers.first_name буде матюкатися, типу такого
"Column 'Customers.first_name ' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."select на 2 поля, то і group by на 2 поля має бути