Оператор 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 клиента.