У меня есть серия вычислений в DB DB2 SQL, которые хранятся как float со значением по умолчанию 0.0.Почему эта сумма процентов не составляет до 100%?
таблица обновляется следующим образом:
CREATE TABLE MY_CALC_DATA_TABLE
(
CALCDATE TIMESTAMP,
INDIV_CALC_DURATION_IN_S FLOAT WITH DEFAULT 0.0,
CALC_TIME_PERCENTAGE FLOAT WITH DEFAULT 0.0
)
Использование sproc. Я расчет суммы следующим образом:
CREATE OR REPLACE PROCEDURE MY_SCHEMA.MY_SPROC (IN P_DATE TIMESTAMP)
LANGUAGE SQL
NO EXTERNAL ACTION
BEGIN
DECLARE V_TOTAL_CALC_TIME_IN_S FLOAT DEFAULT 0.0;
-- other stuff setting up and joining data
-- Calculate the total time taken to perform the
-- individual calculations
SET V_TOTAL_CALC_TIME_IN_S =
(
SELECT
SUM(C.INDIV_CALC_DURATION_IN_S)
FROM
MY_SCHEMA.MY_CALC_DATA_TABLE C
WHERE
C.CALCDATE = P_DATE
)
-- Now calculate each individual calculation's percentage
-- of the toal time.
UPDATE
MY_SCHEMA.MY_CALC_DATA_TABLE C
SET
C.CALC_TIME_PERCENTAGE =
(C.INDIV_CALC_DURATION_IN_S/V_TOTAL_CALC_TIME_IN_S) * 100
WHERE
C.CALCDATE = P_DATE;
[email protected]
Проблема, когда я сумма всех значений CALC_TIME_PERCENTAGE для указанного CALC_DATE всегда меньше, чем 100% с суммой быть такими значениями, как 80% или 70% для разных CALC_DATES.
Мы говорим о расчетах между 35k и 55k с максимальным процентом индивидуального расчета от общего количества, рассчитанного выше, равным 11% и лотов расчетов в диапазоне 0.00000N%.
Чтобы рассчитать общий процент Я использую простой запрос:
SELECT
SUM(C.CALC_TIME_PERCENTAGE)
FROM
MY_SCHEMA.MY_CALC_DATA_TABLE C
WHERE
C.CALCDATE = P_DATE;
Любые предложения?
Обновление: Реорганизация выписки. как предполагалось, исправили проблему. Благодарю. BTW В DB2 FLOAT и DOUBLE используются те же типы. И теперь, чтобы прочитать эту предложенную бумагу по поплавкам.
(Возможно) Глупый вопрос: что произойдет, если вы умножаетесь с 100.0 insead 100? –
Вместо обновления запустите SELECT, включая номер столбца и функцию, и проверьте, является ли округление вашей проблемой. – niktrs
Обычно он должен давать тот же результат. – niktrs