TGViewer
Merion Academy Merion Academy @it_knowledge_base · 9K subscribers
Post #1271 957
Разгадка: почему SQL-отчёт показал 4000 ₽ вместо 1000 ₽

Правильный ответ: 🔥 два JOIN создали четыре строки для одного заказа.

У заказа №42 было:
- 2 строки в order_items
- 2 строки в payments

После соединения таблиц база получила 2 × 2 = 4 строки. В каждой из них осталось o.total = 1000, поэтому SUM(o.total) сложил одну и ту же сумму четыре раза.

orders не содержит дублей. Дубли появились в результате соединения таблиц.

SUM(DISTINCT o.total) здесь не является надёжным исправлением. Если два разных заказа стоят одинаково, один из них потеряется в подсчёте.

Если нужна выручка по заказам, не присоединяй таблицы «один ко многим» до подсчёта суммы:

SELECT o.id, o.total AS revenue
FROM orders o;

А если нужны товары и платежи, сначала собери их отдельно по order_id, а потом присоедини к заказу.
  • 🔥 6
  • 😱 1
More from @it_knowledge_base
  1. Oct 12, 2026Три команды, когда сервер внезапно начал тормозить 🐸 Не открывай сразу десять вкладок. На…
  2. Oct 9, 2026Пятничная загадка: SQL-отчёт умножил выручку В таблице orders у заказа №42 сумма 1000 ₽. У…
  3. Oct 8, 2026photo post
  4. Oct 7, 2026Найти пользователей с шестью и более заказами — куда поставить условие? 🐸 SELECT user_id,…
  5. Oct 6, 2026Если запрос из Node.js зависает слишком долго, то ставим дедлайн Если проект использует вс…
  6. Oct 5, 2026Разгадка пятничного кейса 🐸 Одна из вероятных причин – в зависимости useEffect попал объе…
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 →