TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2500 773
⚡️ SQL-задача с опасным подвохом

Какой баланс получит аккаунт после выполнения запроса в PostgreSQL?


CREATE TABLE accounts (
id int PRIMARY KEY,
balance int
);

CREATE TABLE operations (
account_id int,
amount int
);

INSERT INTO accounts VALUES (1, 100);
INSERT INTO operations VALUES
(1, 10),
(1, 20);

UPDATE accounts a
SET balance = a.balance + o.amount
FROM operations o
WHERE o.account_id = a.id;


Многие ответят 130, но PostgreSQL обновит строку только один раз.

Результатом может стать 110 или 120. Если целевая строка соединяется с несколькими строками из FROM, PostgreSQL использует одну из них, но какую именно, не гарантируется.

Правильный вариант:


UPDATE accounts a
SET balance = a.balance + x.total
FROM (
SELECT account_id, SUM(amount) AS total
FROM operations
GROUP BY account_id
) x
WHERE x.account_id = a.id;


Теперь каждой строке accounts соответствует ровно одна строка источника, а баланс станет 130.

#SQL #PostgreSQL #Database
  • 👍 5
  • ❤ 3
  • 🥰 2
More from @sqlhub
  1. Sep 22, 2026🌟 Samsone: открытые аудиоязыковые модели для смартфонов Samsung опубликовали Samsone - се…
  2. Sep 22, 2026Объектное хранилище в эпоху быстрых данных Объём данных, с которыми нужно работать, растёт…
  3. Sep 21, 2026🧩 Сложная SQL-задача: симуляция DNS-кеша Есть таблица запросов: CREATE TABLE dns_requests…
  4. Sep 18, 2026🔥 PostgreSQL 19 задерживается релиз может сдвинуться на несколько недель или даже месяцев…
  5. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  6. Sep 17, 2026📌 NY Post: Anthropic - это культ Профессор Вашингтонского университета Педро Домингос в и…
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 →