разделить 2 столбца в DB2 - PullRequest
       4

разделить 2 столбца в DB2

0 голосов
/ 30 сентября 2019

Как разделить 2 столбца в DB2. Например, у меня есть запрос ниже

select x.planned,y.unplanned,(x.planned /y.unplanned) average from 
 ((select count(1) planned from 
  (select 1 from table 
  --------
  union all
  select 1 from table
  --------)) x
  join
 (select count(1) unplanned from 
 (select 1 from table
  --------
  union all
  select 1 from table
  --------)) y
  on 1=1)

Этот запрос выводит как

PLANNED  UNPLANNED  AVERAGE
  25         6         4

Неверное значение в AVERAGE, оно должно отображать 4.16 вместо 4. Я не уверен, чтоэто ошибка.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

25 / 6 равно 4⅙ не равно 4.16, если вы явно не округляете результат до двух десятичных знаков.

Для большей гибкости и точности при использовании десятичных чисел в Db2 вы можетерассмотреть возможность использования DECFLOAT. Например,

$ db2 "values 25::decfloat/6"

1                                         
------------------------------------------
       4.166666666666666666666666666666667

При округлении значений DEFFLOAT Db2 использует значения специального регистра CURRENT DECFLOAT ROUNDING MODE для определения режима округления. По умолчанию это ROUND_HALF_EVEN (и это единственные значения, допустимые в некоторых конфигурациях Db2).

db2 "values ROUND(25::decfloat/6,2)"

1                                         
------------------------------------------
                                      4.17

  1 record(s) selected.

для усечения (т.е. округления вниз), тогда вы можете использовать DECIMAL и FLOAT s, как предложил Маоили чтобы избежать проблем с двоичными числами с плавающей запятой, просто DECIMAL s

$ db2 "values DECIMAL(25::DECIMAL/6,7,2)"

1        
---------
     4.16

  1 record(s) selected.
0 голосов
/ 30 сентября 2019

Вы можете использовать что-то вроде: CAST( float(x.planned)/float(y.unplanned) AS DECIMAL(9,2) ) as average, чтобы явно контролировать точность и масштаб результата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...