Ответ
GROUP BY и ORDER BY — это ключевые предложения SQL, которые выполняют принципиально разные операции над результирующим набором данных.
ORDER BY — СОРТИРОВКА
- Назначение: Упорядочивает (сортирует) строки результата запроса по одному или нескольким столбцам в возрастающем (
ASC) или убывающем (DESC) порядке. - Результат: Количество строк в результате не меняется. Меняется только их порядок.
- Использование с агрегатными функциями: Может применяться к результатам агрегации.
-- Сортировка сотрудников по зарплате (от высокой к низкой)
SELECT name, salary FROM employees ORDER BY salary DESC;
-- Сортировка по нескольким полям: сначала по отделу, потом по зарплате
SELECT department, name, salary FROM employees ORDER BY department ASC, salary DESC;
GROUP BY — ГРУППИРОВКА
- Назначение: Объединяет строки, имеющие одинаковые значения в указанных столбцах, в одну сводную строку (группу). Используется вместе с агрегатными функциями (
COUNT(),SUM(),AVG(),MAX(),MIN()). - Результат: Количество строк уменьшается (до одной строки на каждую уникальную комбинацию значений в
GROUP BY). - Фильтрация групп: Для фильтрации групп (а не отдельных строк) используется
HAVING(аналогWHEREдля групп).
-- Подсчет количества сотрудников в каждом отделе
SELECT department, COUNT(*) as employee_count FROM employees GROUP BY department;
-- Нахождение средней зарплаты по отделам, где она больше 50000
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
Ключевое отличие: ORDER BY меняет порядок строк, GROUP BY меняет структуру набора данных, агрегируя строки в группы. Их часто используют вместе: сначала сгруппировать, потом отсортировать результат группировки.
-- Количество сотрудников по отделам, отсортированное по убыванию количества
SELECT department, COUNT(*) as emp_count
FROM employees
GROUP BY department
ORDER BY emp_count DESC;