TGViewer
Симулейтив Симулейтив @simulative_official · 7.46K subscribers
Post #2759 1.28K
Типовая ошибка джунов в аналитике: неверная агрегация данных

Привет! Это Вячеслав Потапов, ментор потоков «Аналитика данных» и «BI-аналитика» (кстати, стартуем сегодня!).

Одна из самых частых ошибок начинающих аналитиков — неправильно считать метрики при объединении данных из разных таблиц. Ошибка кажется мелкой, но может полностью сломать выводы и привести к неверным решениям.

Допустим, у вас есть две таблицы:

orders (заказы):
order_id  user_id  revenue
1 101 1 200
2 102 800
3 101 600


users (пользователи):
user_id  city
101 Москва
102 Казань


Задача: посчитать выручку по городам.

Многие начинающие аналитики пишут такой SQL:

select 
city,
sum(revenue)
from orders
join users using(user_id);


И вроде работает. Но когда в users появляются дубликаты user_id (что в реальных данных происходит постоянно), метрика взлетает в 2-3 раза.

Почему? Потому что JOIN превращает строки вот во что:

user_id 101 = два дубликата в users

Каждая строка в orders умножается ×2, и сумма revenue становится неверной.

Ваш график растёт, менеджер радуется… а потом узнает, что таблица пользователей грязная, и реального роста не было.

Почему так происходит?

Любой JOIN работает как декартово произведение подходящих строк. Если справа две строки на одного user_id, то каждая строка слева размножается. Это не ошибка SQL, это ошибка логики аналитика.

Как правильно? Есть три безопасных паттерна.

1️⃣ Убедиться, что правая таблица уникальна:

select 
city,
sum(revenue)
from orders o
join (
select distinct user_id, city from users
) u using(user_id)
group by 1;


2️⃣ Агрегировать users заранее:

select 
city,
sum(revenue)
from orders o
left join (
select user_id, max(city) as city
from users
group by user_id
) u using(user_id)
group by city;


3️⃣ Делать агрегацию до JOIN, если возможно:

with revenue_by_user as (
select user_id, sum(revenue) as user_rev
from orders
group by user_id
)
select city, sum(user_rev)
from revenue_by_user r
join users u using(user_id)
group by city;


Вывод:
➖ JOIN'ы редко ломают SQL;
➖ JOIN'ы часто ломают аналитику.

Потому что источник проблемы — дубликаты в данных, о которых джуны обычно не знают или не думают.

Будьте внимательны: неправильная агрегация — это один из главных способов ошибиться на реальных задачах.


📊 Simulative
  • 🔥 26
  • ❤ 9
More from @simulative_official
  1. Oct 1, 2026Post #3592
  2. Sep 30, 2026💻💻💻💻💻 Откуда на самом деле берутся данные? На учебных задачах всё просто: тебе дают г…
  3. Sep 30, 2026⭐️ Топ метрик, которые должен уметь считать каждый аналитик Рекламные метрики — это не про…
  4. Sep 29, 2026⭐️ Уже сегодня: как ML-инженер учит компьютер находить смысл в тексте Сегодня покажем проф…
  5. Sep 28, 2026#проанализировали_и_поняли
  6. Sep 27, 2026💻💻💻💻💻 Как работает ML-инженер — на примере поиска похожих текстов Пользователь вводит…
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 →