Data Analyst Professional · Модуль 4 · Урок 14 із 51

CASE: прозорі бізнес-правила у SQL

CASE перетворює умови на категорію або значення. Він читається зверху вниз і повертає перший збіг, тому порядок правил, coverage, взаємовиключність і явний ELSE є частиною коректності.

75–90 хвRule logicМінітест: 3 питання

Searched CASE для діапазонів і складних умов

CASE WHEN net_revenue >= 100000 THEN 'enterprise' WHEN net_revenue >= 20000 THEN 'mid_market' WHEN net_revenue >= 0 THEN 'small' ELSE 'INVALID' END AS revenue_band

Вищий threshold стоїть першим. Якби >= 0 був першим, усі невід’ємні values отримали б small, бо CASE зупиняється на першому TRUE.

Simple CASE для точних значень

CASE status WHEN 'paid' THEN 'completed' WHEN 'shipped' THEN 'completed' WHEN 'cancelled' THEN 'cancelled' ELSE 'other_or_unknown' END AS status_group

Simple CASE порівнює один expression із точними values. Для ranges, NULL або кількох полів використовуйте searched CASE. WHEN NULL у simple CASE не замінює WHEN status IS NULL.

Якість rule set

Mutually exclusive

Один row не повинен логічно належати до кількох категорій, якщо порядок не є явним пріоритетом.

Collectively exhaustive

ELSE показує unknown/other/invalid, а не мовчки прирівнює їх до основної групи.

Stable definition

Threshold, owner, effective date і version мають бути задокументовані.

Tested boundaries

Перевірте значення точно на межі, одразу нижче/вище, NULL і invalid.

Conditional aggregation

SELECT channel, COUNT(*) AS orders, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) AS completed_orders, SUM(CASE WHEN status = 'completed' THEN net_amount ELSE 0 END) AS completed_revenue FROM analytics.orders GROUP BY channel;

У PostgreSQL також є FILTER (WHERE ...), але CASE залишається поширеним і переносимим патерном. Важливо, щоб ELSE 0/NULL відповідав denominator і metric definition.

Коли CASE треба замінити rule table

CASE доречнийRule table краща
3–5 стабільних правил у конкретному queryдесятки mappings або часті зміни
технічна класифікація з ownerbusiness taxonomy з effective dates
правила легко покрити testsпотрібні governance, audit history і non-developer editing

Rule table має власний унікальний key, version/effective dates і перевірку overlap. JOIN до неї також потребує cardinality audit.

Практика: test matrix

  • Запишіть категорії, порядок і business owner.
  • Створіть test rows для кожної boundary, NULL і invalid value.
  • Порахуйте distribution категорій та частку ELSE.
  • Переконайтеся, що rule set не має небажаних overlaps/gaps.
  • Якщо правил багато, винесіть їх у versioned mapping table.

Офіційна довідка

Готовність до тесту

Ви знаєте first-match semantics, правильно впорядковуєте ranges, робите ELSE видимим і тестуєте межі та distribution.

Практична перевірка · урок 14 з 51

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Як CASE обирає результат?
2. Чому thresholds треба ставити від більшого до меншого?
3. Для чого явний ELSE?