在DB2中划分2列

时间:2019-09-30 15:32:54

标签: sql db2

如何在DB2中划分2列。例如,我有以下查询

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 个答案:

答案 0 :(得分:1)

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.

进行截断(即舍入),然后可以按照毛建议使用DECIMALFLOAT,或者避免DECIMAL s来避免二进制浮点问题

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

1        
---------
     4.16

  1 record(s) selected.

答案 1 :(得分:0)

您可以使用类似CAST( float(x.planned)/float(y.unplanned) AS DECIMAL(9,2) ) as average的内容来显式控制结果的精度和比例