Как работает сортировка результатов при использовании GROUP BY в SQL?

«Как работает сортировка результатов при использовании GROUP BY в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оператор GROUP BY сам по себе не гарантирует какого-либо порядка в результирующем наборе. Он только группирует строки по одинаковым значениям указанных столбцов. Для упорядочивания результата необходимо явно использовать оператор ORDER BY.

Порядок выполнения запроса:

  1. FROM / JOIN — выбор таблиц.
  2. WHERE — фильтрация строк.
  3. GROUP BY — группировка.
  4. HAVING — фильтрация групп.
  5. SELECT — выбор столбцов и агрегатных функций.
  6. ORDER BY — сортировка финального результата.
  7. LIMIT / OFFSET — ограничение вывода.

Пример 1: Сортировка по агрегатной функции

-- Найти отделы с наибольшим количеством сотрудников
SELECT 
    department_id,
    COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
ORDER BY employee_count DESC; -- Сортировка после группировки

Пример 2: Сортировка по столбцу группировки

-- Сумма продаж по менеджерам, отсортированная по имени менеджера
SELECT 
    manager_name,
    SUM(sale_amount) AS total_sales
FROM sales
GROUP BY manager_name
ORDER BY manager_name ASC; -- Сортировка по алфавиту

Пример 3: Сортировка по нескольким полям

-- Средняя зарплата по отделам и должностям
SELECT 
    department,
    job_title,
    AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_title
ORDER BY department ASC, avg_salary DESC; -- Сначала по отделу, затем по з/п

Важно: Если ORDER BY не указан, порядок строк зависит от внутренней оптимизации СУБД и может меняться от запроса к запросу. Всегда используйте ORDER BY, когда важен конкретный порядок.