15
Практика
1. В банкомат загружено некоторое количество купюр
определенных достоинств.
Напишите функцию, возвращающую минимальный набор
купюр, которыми банкомат может выдать указанную сумму.
2. Бизнес-центр сдает офисы компаниям. В конце месяца
администрации БЦ приходит общий счет за электроэнергию,
который надо распределить между арендаторами
пропорционально площади занимаемых помещений.
Выставляемые арендаторам счета необходимо округлить
до копеек, но так, чтобы их сумма совпала со значением,
указанным в общем счете.
1. Состояние банкомата можно представить таблицей:
banknotes (
value numeric, -- достоинство
qty integer -- наличное количество
);
Напишите агрегатную функцию, рассчитанную на вызов в режиме
«нарастающего итога» по убыванию достоинства купюр. Для каждой
строки таблицы она должна возвращать количество купюр данного
достоинства, которое надо выдать.
2. Помещения бизнес-центра можно представить таблицей:
rent (
renter text PRIMARY KEY, -- арендатор
area integer -- площадь, м^2
);
Пример, показывающий проблему с обычным округлением:
INSERT INTO rent VALUES ('A',100), ('B',100), ('C',100);
SELECT round(1000.00 * area / sum(area) OVER ()), 2)
FROM rent;