TGViewer
дата инженеретта дата инженеретта @data_engineerette · 3.43K subscribers
Post #163 3.13K
Как написать джойн без джойна?

📃Пусть у нас есть таблица с клиентами (client_id, name) и заказами (order_id, amount, client_id).
Нужно вывести имя клиента и сумму всех его заказов. Если нет заказов - то 0.

🌷Подход №1 - join (все очень просто)

SELECT name, SUM(COALESCE(amount, 0)) AS total
FROM clients c
LEFT JOIN orders o
ON c.id = o.client_id
GROUP BY name
ORDER BY name


🌷Подход №2 - union

Когда что-то нужно посчитать

🟢группируем отдельно по датасетам
🟢проставляем null в отсутствующих колонках
🟢юнионим
🟢группируем по ключу, если бы мы джойнили
🟢навешиваем нужные функции сверху

WITH grouped AS (
SELECT
client_id AS id,
null AS name,
SUM(amount) AS total
FROM orders
GROUP BY client_id
),
final AS (
SELECT id, name, null AS total FROM clients
UNION
SELECT id, null AS name, total FROM grouped
)
SELECT
MAX(name) AS name,
COALESCE(MAX(total), 0) AS total
FROM final
GROUP BY id
ORDER BY name


На этапе final у нас будет примерно такое:

id name  amount
1 Alice null
2 Bob null
3 Cathy null
1 null 2000
2 null 5000


✏️ На моем крошечном датасете в плане запросов в постгре косты второго запроса меньше в 2 раза.
В первом почти все ресурсы тратятся на Hash Join.

#sql_tips
  • 🔥 17
  • 👍 8
  • ❤ 2
  • 💯 2
More from @data_engineerette
  1. Oct 2, 2026Lance Недавно ковырялась в инструменте для обслуживания таблиц Apache Amoro и наткнулась н…
  2. Sep 30, 20265 октября начнется 19-й поток программы Data Engineer от Newprolab Программа для junior- и…
  3. Sep 25, 2026Как прошла SmartData 2026? Я вот перечитываю свои впечатления от прошлого года и понимаю,…
  4. Sep 24, 2026Исследование data-people Тут ребята из DevCrowd запустили ежегодное исследование специалис…
  5. Sep 15, 2026Каким должен быть хороший DE? Меня однажды спросили на собесе: 🤩Какие 3 качества важны дл…
  6. Sep 12, 2026Mermaid-диаграммы Наконец-то дошли руки поковыряться в mermaid-диаграммах, это что за имба…
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 →