Какие основные агрегирующие функции вы знаете в SQL?

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

Ответ

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

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

Функция Описание Пример использования
COUNT() Подсчитывает количество строк. COUNT(*) считает все строки, COUNT(column) — не-NULL значения. SELECT COUNT(*) FROM orders;
SUM() Вычисляет сумму значений числового столбца. SELECT SUM(amount) FROM payments WHERE status = 'success';
AVG() Вычисляет среднее арифметическое значений. SELECT AVG(rating) FROM product_reviews;
MAX() / MIN() Находит максимальное или минимальное значение в столбце. Работают с числами, датами, строками. SELECT MIN(price), MAX(price) FROM products;
GROUP_CONCAT() (MySQL) / STRING_AGG() (PostgreSQL) Объединяет строковые значения из группы в одну строку с разделителем. SELECT department_id, GROUP_CONCAT(employee_name) FROM employees GROUP BY department_id;

Ключевые моменты и пример с GROUP BY:

-- Пример: средний чек и количество заказов по каждому клиенту
SELECT
    customer_id,
    COUNT(*) AS order_count,        -- Количество заказов клиента
    AVG(total_amount) AS avg_order, -- Средняя сумма заказа
    SUM(total_amount) AS total_spent -- Общая потраченная сумма
FROM orders
WHERE created_at >= '2024-01-01'
GROUP BY customer_id                 -- Группировка по клиенту
HAVING COUNT(*) > 5;                 -- Фильтрация по результату агрегации

Важно:

  • WHERE фильтрует строки до агрегации.
  • HAVING фильтрует результаты после агрегации (как WHERE для сгруппированных данных).
  • Агрегатные функции игнорируют значения NULL (кроме COUNT(*)).