TGViewer
Node.js Recipes Node.js Recipes @node_recipes · 3.1K subscribers
Post #137 1.35K
Как посчитать нарастающий итог?
#database

Частая ошибка начинающих #nodejs разработчиков – лишняя нагрузка CPU. Один из методов разгрузить CPU это использование базы данных для расчетов. Большинство разработчиков используют агрегатные функции, но не оконные. Возможно, их отпугивает название, которое на английском звучит как OS от Microsoft – windows.

На картинке к рецепту вы видите различие работы агрегатных и оконных функций. В качестве примера, решим SQL задачу.

Дана схема:
CREATE TABLE users (
 id       SERIAL PRIMARY KEY,
 email varchar(100) NOT NULL
);
CREATE TABLE operations (
 id       SERIAL PRIMARY KEY,
 user_id int4 NOT NULL,
 amount int4 NOT NULL,
 created_at timestamp DEFAULT now(),
 FOREIGN KEY(user_id) REFERENCES users(id)
);
Вывести историю операций пользователя с балансом на момент окончания операции.

Решение будет иметь вид:
SELECT *, SUM(amount) OVER (PARTITION BY user_id order by created_at) as balance FROM operations;

Ссылки:
🔗 пример в db-fiddle,
🔗 документация по windows функциям.
More from @node_recipes
  1. Jan 5, 2026По всьому світу проходять Cursor Meetups, де локальні спільноти діляться досвідом використ…
  2. Jan 5, 2026Думки на вихідних: Full Stack Learning Подивився останнє відео Сергія Немчинського про фул…
  3. Dec 31, 2025Залишаються лічені години 2025-го. І будьмо чесними: сам перехід на 2026-й нічого автомати…
  4. Dec 25, 2025Моє відкриття 2025 року, як доповідача, це Napkin.ai. На малюнку приклад того, як Napkin г…
  5. Dec 23, 2025А ось й ChatGPT додав 2025 review feature. Авжеж в мене half coded Nest.js app, як ще :)
  6. Dec 23, 2025Моє технічне відкриття 2025 року — centrifugal.dev У 2025-му я багато працював із реальним…
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 →