TGViewer
Симулейтив Симулейтив @simulative_official · 7.47K subscribers
Post #3479 848
Симулейтив ✍🏻 Задача: ежедневный отчёт о продажах Всем привет! На связи Валерия Елпатьевская, ментор курса «Инженер данных» 👋🏻 Порешаем задачу вместе? Проверяем базу: SQL, дедупликацию, инкрементальную загрузку и Data Quality. Данные: Есть таблица orders: (order_id…
Разбор задачи: ежедневный отчёт о продажах

Всем привет! На связи Валерия Елпатьевская, ментор курса «Инженер данных» 👋🏻

Вчера я давала задачу на ежедневный отчёт о продажах, сегодня несу решение 👇🏻

SQL-запрос:

WITH deduped AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY order_id ORDER BY updated_at DESC) as rn
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '1 day'
AND order_date < CURRENT_DATE
),
metrics AS (
SELECT
COUNT(*) AS total_orders,
SUM(amount) AS total_revenue,
ROUND(AVG(amount), 2) AS avg_check
FROM deduped
WHERE rn = 1 AND status = 'paid'
)
SELECT
CURRENT_DATE - INTERVAL '1 day' AS report_date, -- бизнес-дата отчёта
total_orders,
total_revenue,
avg_check,
NOW() AS created_at -- метка времени загрузки
FROM metrics;


* ROW_NUMBER по order_id + сортировка по updated_at даёт последнюю версию заказа. Фильтр rn = 1 AND status = 'paid' применяется после дедупликации.

Схема таблицы:

CREATE TABLE daily_sales_report (
report_date DATE PRIMARY KEY,
total_orders INT,
total_revenue DECIMAL(15,2),
avg_check DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);


PRIMARY KEY гарантирует одну строку на день. Типы DECIMAL защищают от ошибок округления.

Шаги пайплайна:

✅ Extract → забираем orders за вчерашний день (инкрементально по дате);
✅ Transform → дедупликация, фильтр paid, агрегаты (тот самый SQL);
✅ Load → UPSERT (INSERT ... ON CONFLICT DO UPDATE) по report_date;
✅ Schedule → запуск в 09:00.

* Важно помнить про идемпотентность: повторный запуск пайплайна не дублирует строки и не ломает метрики.

Data Quality проверки:

✅ total_orders > 0 и total_revenue >= 0;
✅ report_date уникален (нет дублей дат в витрине).

* Опционально: алерт, если выручка отклоняется >50% от предыдущего дня.

Понравилось решение? Больше таких задач решаем на курсе «Инженер данных» с моей менторской поддержкой — вы научитесь строить надёжные пайплайны для компаний и освоите необходимые инструменты для их создания. И самое главное — все задачи построены на реальных кейсах бизнеса!


⚙️ Записаться на курс: https://simulative.ru/data-engineer

📈 Симулейтив | 📱 ВК | 📱 YouTube | 📱 Канал о DS
  • 👍 5
  • ❤ 1
  • 🔥 1
More from @simulative_official
  1. Sep 25, 2026⚡️ Через 10 минут начинаем! Валерия Елпатьевская уже на месте. Показываем, как собрать ETL…
  2. Sep 25, 2026Сегодня собираем ETL-пайплайн на данных GitHub — от источника до дашборда Сегодня в 19:00…
  3. Sep 24, 2026💻💻💻💻💻 Собираем ETL-пайплайн на данных GitHub Как данные проходят путь от внешнего сер…
  4. Sep 24, 2026Post #3582
  5. Sep 23, 2026Что происходит между вопросом бизнеса и готовым дашбордом? Сегодня в 19:00 покажем этот пу…
  6. Sep 21, 2026💻💻💻💻💻Как устроена работа аналитика в среднем бизнесе? Хотите понять, чего ждать, если…
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 →