Ответ
При тестировании и валидации отчетов или сложных запросов я часто использую агрегирующие функции с 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 можно указывать только столбцы, по которым идет группировка, или агрегированные функции над другими столбцами. Нарушение этого правила — частый источник ошибок в приложениях, который мы выявляем.