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

ORDER BY, LIMIT і перевірка результату

Перші рядки без явного порядку не є «топом». LIMIT прискорює огляд, але не робить вибірку репрезентативною. Завершений запит має детерміноване сортування, контроль scope і прості reconciliation checks.

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

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 зручний для перевірки форми результату, але не доводить якість усіх рядків.

Top-N

Потрібен явний ORDER BY metric DESC і tie-breaker.

Pagination

OFFSET може бути повільним і нестабільним при змінах; потрібен унікальний порядок або keyset pagination.

Sample

Перші 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.

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

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

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

1. Чи гарантований порядок рядків без ORDER BY?
2. Що означає ORDER BY net_amount DESC?
3. Навіщо другий sort key order_id?