Что такое агрегатные функции в SQL?

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

Ответ

Агрегатные функции в SQL — это функции, которые выполняют вычисление над набором строк (группой) и возвращают одно результирующее значение. Они используются в сочетании с предложениями SELECT, GROUP BY и HAVING.

Основные агрегатные функции:

  • COUNT() — возвращает количество строк.
    • COUNT(*) — считает все строки, включая NULL.
    • COUNT(column) — считает строки, где значение в column не NULL.
    • COUNT(DISTINCT column) — считает количество уникальных значений.
  • SUM(column) — возвращает сумму значений числового столбца.
  • AVG(column) — возвращает среднее арифметическое значений.
  • MAX(column) / MIN(column) — возвращают максимальное/минимальное значение.

Практические примеры использования:

-- 1. Общая статистика по таблице
SELECT 
    COUNT(*) as total_employees,
    AVG(salary) as average_salary,
    MAX(salary) as max_salary
FROM employees;

-- 2. Группировка с агрегацией (ключевое использование)
SELECT 
    department_id,
    COUNT(*) as emp_count,
    AVG(salary) as avg_salary,
    SUM(salary) as total_budget
FROM employees
WHERE hire_date > '2020-01-01' -- Фильтрация ДО группировки
GROUP BY department_id
HAVING AVG(salary) > 50000; -- Фильтрация ПОСЛЕ группировки

-- 3. Поиск дубликатов с помощью COUNT
SELECT email, COUNT(*) as duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Важные правила:

  1. Игнорирование NULL: Все агрегатные функции, кроме COUNT(*), игнорируют значения NULL.
  2. WHERE vs HAVING: WHERE фильтрует строки до группировки, HAVING фильтрует результаты после группировки.
  3. Группировка: При использовании GROUP BY в SELECT можно указывать только столбцы для группировки и агрегатные функции.