15
Практика+
1. Напишите агрегатную функцию, вычисляющую
средневзвешенное значение для совокупности элементов
нескольких типов. Веса для типов элементов передаются
функции в виде массива.
2. Бизнес-центр сдает офисы компаниям. В конце месяца
администрации БЦ приходит общий счет за электроэнергию,
который надо распределить между арендаторами
пропорционально площади занимаемых помещений.
Выставляемые арендаторам счета необходимо округлить
до копеек, но так, чтобы их сумма совпала со значением,
указанным в общем счете.
1. Средневзвешенное значение совокупности элементов — среднее
значение, учитывающее вес, или важность, каждого элемента.
Значение вычисляется по формуле
(x
1
w(t
1
) + x
2
w(t
2
) + … + x
n
w(t
n
)) / (w(t
1
) + w(t
2
) + … + w(t
n
)), где
x
i
— значение элемента, t
i
— тип элемента, w(t
i
) — вес элемента
данного типа.
Требуется написать агрегатную функцию следующего вида:
w_agv(x float, t integer, w float[]).
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;