如何在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。我不确定这是什么错误。
答案 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.
进行截断(即舍入),然后可以按照毛建议使用DECIMAL
和FLOAT
,或者避免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
的内容来显式控制结果的精度和比例