GROUP в Oracle SQL — как управлять агрегацией и группировкой данных

🟢 GROUP в Oracle SQL. Введение

Когда вы хотите получить итоговые значения по категориям — суммы, средние, максимумы — вам нужно сгруппировать данные. Именно здесь вступает в игру ключевое слово GROUP, как часть конструкции GROUP BY. Оно позволяет объединять строки с одинаковыми значениями в одну группу, к которой применяются агрегатные функции.


🔤 Написание

sql
SELECT столбец, агрегатная_функция
FROM таблица
GROUP BY столбец;
  • Используется с агрегатами: SUM(), AVG(), COUNT(), MIN(), MAX()

  • Может использоваться с HAVING для фильтрации групп


🔄 Где используется

  • Подсчёт количества записей в категориях

  • Суммирование по группам

  • Построение отчётов

  • Аггрегация данных по дате, отделу, категории

  • Комбинация с JOIN, CASE, HAVING


🧪 10 Примеров использования GROUP

1️⃣ Количество сотрудников в каждом отделе

sql
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

2️⃣ Сумма продаж по каждому продавцу

sql
SELECT salesperson_id, SUM(amount)
FROM sales
GROUP BY salesperson_id;

3️⃣ Средняя зарплата по должности

sql
SELECT job_id, AVG(salary)
FROM employees
GROUP BY job_id;

4️⃣ Группировка по нескольким столбцам

sql
SELECT department_id, job_id, COUNT(*)
FROM employees
GROUP BY department_id, job_id;

5️⃣ Фильтрация агрегатов через HAVING

sql
SELECT department_id, COUNT(*) AS cnt
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 10;

6️⃣ Использование GROUP с ORDER BY

sql
SELECT job_id, MAX(salary)
FROM employees
GROUP BY job_id
ORDER BY MAX(salary) DESC;

7️⃣ GROUP в подзапросе

sql
SELECT *
FROM (
SELECT department_id, AVG(salary) AS avg_sal
FROM employees
GROUP BY department_id
) t
WHERE avg_sal > 5000;

8️⃣ Группировка дат по месяцу

sql
SELECT TO_CHAR(order_date, 'YYYY-MM') AS month, COUNT(*)
FROM orders
GROUP BY TO_CHAR(order_date, 'YYYY-MM');

9️⃣ GROUP + CASE (например, пол)

sql
SELECT
CASE WHEN gender = 'M' THEN 'Мужчины' ELSE 'Женщины' END AS пол,
COUNT(*) AS кол_во
FROM users
GROUP BY
CASE WHEN gender = 'M' THEN 'Мужчины' ELSE 'Женщины' END;

🔟 Агрегация без GROUP — все строки как одна группа

sql
SELECT COUNT(*) FROM employees;
-- Нет GROUP BY => одна общая группа

🧩 Заключение

GROUP — важнейшее ключевое слово для анализа и отчётности. Оно позволяет превратить огромные таблицы в сжатые и осмысленные наборы групп, идеально подходящие для визуализации и принятия решений.

💡 Запомни:

  • GROUP BY группирует строки по значению

  • Применяй HAVING для фильтрации групп

  • Работает только с агрегатными функциями

  • Можно группировать по нескольким полям и выражениям


🔜 Следующая статья:

GRANT в Oracle SQL — как выдавать права на объекты и управлять доступом


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии