В каких секциях SQL-запроса можно использовать агрегатные функции и для каких целей?

Ответ

Агрегатные функции (такие как COUNT, SUM, AVG, MAX, MIN) используются для выполнения вычислений над набором строк и возвращения одного итогового значения. Их можно применять в следующих секциях SQL-запроса:

  1. SELECT

    • Цель: Для вычисления итоговых значений по столбцам. Обычно используется вместе с GROUP BY.
      -- Подсчет средней зарплаты в каждом департаменте
      SELECT department, AVG(salary) as average_salary
      FROM employees
      GROUP BY department;
  2. HAVING

    • Цель: Для фильтрации групп строк после их агрегации. HAVING работает с результатами агрегатных функций, в отличие от WHERE, который фильтрует строки до агрегации.
      -- Вывод только тех департаментов, где количество сотрудников больше 10
      SELECT department, COUNT(id) as employee_count
      FROM employees
      GROUP BY department
      HAVING COUNT(id) > 10;
  3. ORDER BY

    • Цель: Для сортировки результирующего набора данных на основе значения, вычисленного агрегатной функцией.
      -- Сортировка департаментов по убыванию суммарной зарплаты
      SELECT department, SUM(salary) as total_salary
      FROM employees
      GROUP BY department
      ORDER BY total_salary DESC;

Важное замечание: Агрегатные функции нельзя использовать в секции WHERE, так как WHERE фильтрует строки до того, как происходит группировка и вычисление агрегатов. Для фильтрации по результатам агрегации всегда используется HAVING.