Data Analyst Professional · Модуль 3 · Урок 11 із 51
ORDER BY, LIMIT і перевірка результату
Перші рядки без явного порядку не є «топом». LIMIT прискорює огляд, але не робить вибірку репрезентативною. Завершений запит має детерміноване сортування, контроль scope і прості reconciliation checks.
ORDER BY визначає порядок результату
SELECT
order_id,
order_ts,
net_amount
FROM analytics.orders
WHERE status = 'completed'
ORDER BY net_amount DESC, order_id ASC;Другий ключ розв’язує ties і робить порядок стабільнішим. Без ORDER BY база може повертати рядки в будь-якому зручному для плану виконання порядку.
NULLS і сортування
Поведінка NULL у ASC/DESC відрізняється між СУБД. У PostgreSQL її можна вказати явно:
ORDER BY shipped_at DESC NULLS LAST, order_id ASCЯкщо NULL означає «ще не відправлено», можливо, бізнесу потрібне не просто сортування, а окрема категорія status. Не дозволяйте технічному default визначати пріоритет роботи.
LIMIT не замінює порядок
LIMIT 50 зручний для перевірки форми результату, але не доводить якість усіх рядків.
Потрібен явний ORDER BY metric DESC і tie-breaker.
OFFSET може бути повільним і нестабільним при змінах; потрібен унікальний порядок або keyset pagination.
Перші N рядків — не random sample. Використовуйте призначений метод і фіксуйте seed, якщо доступно.
Чотири перевірки перед висновком
| Check | Питання | Мінімальний доказ |
|---|---|---|
| Row count | Скільки рядків повертає кожен крок? | count(*) до і після filters |
| Key uniqueness | Чи збігається результат з expected grain? | count(*) vs count(distinct key) |
| Range | Чи реалістичні дати й суми? | min/max та invalid counts |
| Reconciliation | Чи збігається total із контрольним джерелом? | same metric, scope, currency, time |
Reviewable query
-- Purpose: completed UA orders for August 2026
-- Grain: one row per order_id
-- Timezone: Europe/Kyiv; currency: UAH
SELECT
order_id,
customer_id,
order_ts,
net_amount
FROM analytics.orders
WHERE status = 'completed'
AND country_code = 'UA'
AND order_ts >= TIMESTAMP '2026-08-01 00:00:00'
AND order_ts < TIMESTAMP '2026-09-01 00:00:00'
ORDER BY order_ts ASC, order_id ASC;Коментар не виправляє SQL, але фіксує business contract: мету, grain, timezone й currency. Поруч збережіть контрольні counts, дату запуску й версію source.
Практика: query QA card
- Додайте ORDER BY із явним напрямком і tie-breaker.
- Поясніть, чи має NULL бути FIRST/LAST або окремим status.
- Використайте LIMIT лише для preview, а top-N — тільки після sort.
- Звірте row count, distinct key, min/max і total.
- Запишіть purpose, grain, scope, timezone, currency та run date.
Офіційні довідки
Модуль 3 завершено
Ви можете прочитати схему, сформувати явний SELECT, правильно відфільтрувати NULL і timestamp, побудувати детермінований top-N та додати базові checks.
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.