TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2351 5.07K
🖥 Cовет по SQL-тестам: тестируйте не только результат запроса, а его инварианты.

Обычно SQL проверяют так:


SELECT * FROM orders WHERE status = 'paid';


И потом сравнивают: «вернулись нужные строки или нет».

Но в реальных системах чаще ломается не сам happy path, а скрытые свойства данных.

Например, для отчёта по заказам тест должен проверять не только конкретные строки, а правила:


-- сумма по пользователям должна совпадать с общей суммой
WITH by_user AS (
SELECT user_id, SUM(amount) AS total
FROM orders
WHERE status = 'paid'
GROUP BY user_id
),
overall AS (
SELECT SUM(amount) AS total
FROM orders
WHERE status = 'paid'
)
SELECT
(SELECT SUM(total) FROM by_user) = (SELECT total FROM overall) AS is_valid;


То есть вы тестируете не «мне вернулось 10 строк», а:

агрегаты не теряют деньги
join не размножает строки
фильтр не выкидывает валидные данные
NULL не ломает расчёты
сумма после группировки совпадает с суммой до группировки
каждый order попадает ровно в одну категорию
дедупликация не удаляет нужные записи

Особенно полезный приём - тест на размножение строк после JOIN:


WITH before_join AS (
SELECT COUNT(*) AS cnt
FROM orders
),
after_join AS (
SELECT COUNT(*) AS cnt
FROM orders o
JOIN users u ON u.id = o.user_id
)
SELECT
after_join.cnt <= before_join.cnt AS no_unexpected_multiplication
FROM before_join, after_join;


Если после JOIN строк стало больше без явной причины - у вас почти наверняка проблема с кардинальностью.

Хороший SQL-тест проверяет не только ответ, а свойства запроса, которые должны оставаться истинными при любых данных. Именно так ловятся баги, которые не видно на маленьком тестовом датасете.
  • 🔥 15
  • 👍 9
  • ❤ 8
  • 😁 3
More from @sqlhub
  1. Sep 22, 2026Объектное хранилище в эпоху быстрых данных Объём данных, с которыми нужно работать, растёт…
  2. Sep 21, 2026🧩 Сложная SQL-задача: симуляция DNS-кеша Есть таблица запросов: CREATE TABLE dns_requests…
  3. Sep 18, 2026🔥 PostgreSQL 19 задерживается релиз может сдвинуться на несколько недель или даже месяцев…
  4. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  5. Sep 17, 2026📌 NY Post: Anthropic - это культ Профессор Вашингтонского университета Педро Домингос в и…
  6. Sep 16, 2026Post #2492
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →