#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 функциям.
