Ваш начальник просит подготовить отчет о стоимости времени программистов по проекту на основе общей работы по устранению всех ошибок.
У каждого программиста в таблице Accounts есть своя почасовая ставка, поэтому записывается количество часов (hours), необходимых для устранения каждой ошибки в таблице Bugs, и это значение умножается на почасовую ставку (hourly_rate) программиста, которому выделена работа.
Файл npvtHepa\_Rounding-Errors/intro/cost-per~bug.sql
SELECT b.bug_id, b.hours * a.hourly_rate AS cost_per_bug FROM Bugs AS b
JOIN Accounts AS a ON (b.assigned_to = a.account_id);
Для поддержки данного запроса необходимо создать новые столбцы в таблицах Bugs и Accounts. Обоими столбцами должны поддерживаться дробные значения, поскольку затраты требуется отслеживать с высокой точностью. Решено определить новые столбцы как FLOAT, так как этим типом данных поддерживаются дробные значения.
Файл npMMepa:_Rounding-Errors/intro/float-columns.sql
ALTER TABLE Bugs ADD COLUMN hours FLOAT;
ALTER TABLE Accounts ADD COLUMN hourly_rate FLOAT;
Вы обновляете столбцы сведениями из рабочих журналов ошибок, а также ставками программистов, тестируете отчет и ежедневно вызываете его.
На следующий день в офис пришел ваш начальник с копией отчета по стоимости проекта. «Эти числа не суммируются», — сообщает он сквозь стиснутые зубы. «Я выполнил расчеты вручную для сравнения, и ваш отчет неточен — незначительно, всего на несколько долларов. Как вы объясните это?» Вы начинаете покрываться испариной. Что могло быть неправильным в таком простом вычислении?
|