Используешь ли GROUP BY в SQL для задач тестирования?

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

Ответ

Да, GROUP BY — один из самых часто используемых операторов в SQL-запросах для проверки целостности и корректности данных.

Конкретные сценарии применения в QA:

  1. Проверка агрегированной логики: Верификация, что отчёты, дашборды или API-методы, возвращающие суммы, средние значения или количества, работают правильно.

    -- Проверка итоговой суммы заказов по клиенту
    SELECT customer_id, COUNT(*) as order_count, SUM(total_amount) as total_spent
    FROM orders
    WHERE order_date >= '2024-01-01'
    GROUP BY customer_id
    HAVING SUM(total_amount) > 10000;
    -- Результат сравниваю с данными из системы отчётности.
  2. Поиск некорректных дубликатов: Обнаружение дублей, которые не должны существовать согласно бизнес-правилам.

    -- Поиск пользователей с более чем одним активным сеансом (что может быть ошибкой)
    SELECT user_id, COUNT(*) as active_sessions
    FROM user_sessions
    WHERE status = 'ACTIVE'
    GROUP BY user_id
    HAVING COUNT(*) > 1;
  3. Валидация распределения данных: Проверка, что данные разбиты по категориям или статусам ожидаемым образом после выполнения batch-процесса.

    -- Проверка распределения статусов заявок после ночного обработчика
    SELECT status, COUNT(*) as count
    FROM applications
    WHERE processing_date = CURRENT_DATE
    GROUP BY status;
    -- Ожидаю, например, 80% 'PROCESSED', 20% 'ERROR', 0% 'PENDING'.
  4. Использование с HAVING: Ключевое отличие HAVING от WHERE в том, что HAVING фильтрует результаты после группировки. Это мощный инструмент для проверки бизнес-правил на агрегированном уровне.

    -- Найти категории товаров, где средняя цена ниже общей средней (возможная ошибка ценообразования)
    SELECT category_id, AVG(price) as avg_price
    FROM products
    GROUP BY category_id
    HAVING AVG(price) < (SELECT AVG(price) FROM products);

    GROUP BY — это основа для создания запросов-«детекторов аномалий» в данных, которые затем можно автоматизировать в рамках регрессионного или интеграционного тестирования.