Какие агрегирующие функции можно использовать с GROUP BY в SQL?

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

Ответ

При тестировании и валидации отчетов или сложных запросов я часто использую агрегирующие функции с GROUP BY. Вот основные из них:

  • COUNT() — подсчитывает количество строк в каждой группе. Часто используется для проверки итоговых сумм.
    -- Проверяем количество заказов по статусам (тест на корректность бизнес-процесса)
    SELECT status, COUNT(*) as order_count FROM orders GROUP BY status;
  • SUM() — вычисляет сумму значений числового столбца в группе. Ключевая функция для тестирования финансовых расчетов.
    -- Валидируем общую сумму продаж по категориям товаров
    SELECT category_id, SUM(price * quantity) as total_revenue FROM order_items GROUP BY category_id;
  • AVG() — находит среднее значение. Полезна для проверки метрик, например, средней стоимости заказа.
    SELECT customer_id, AVG(order_total) as avg_order_value FROM orders GROUP BY customer_id;
  • MIN() / MAX() — находят минимальное и максимальное значение в группе. Используются для проверки диапазонов данных.
    -- Проверяем диапазон дат регистрации пользователей по странам
    SELECT country, MIN(registered_at) as first_registration, MAX(registered_at) as last_registration FROM users GROUP BY country;
  • STRING_AGG() (PostgreSQL) / GROUP_CONCAT() (MySQL) — объединяет строковые значения из группы в одну строку. Полезна для проверки состава групп.
    -- Смотрим, какие теги были присвоены статьям (проверка логики тегирования)
    SELECT article_id, STRING_AGG(tag_name, ', ') as tags FROM article_tags GROUP BY article_id;

Важное правило для тестирования: В запросе с GROUP BY в SELECT можно указывать только столбцы, по которым идет группировка, или агрегированные функции над другими столбцами. Нарушение этого правила — частый источник ошибок в приложениях, который мы выявляем.