首页 > 解决方案 > SQL“不正确”的列计算

问题描述

我有一个计算列,它给我的结果与使用其他列的手动计算不同。

SELECT  VG.avg_tax, 
        VP2.prop * (S.points / 100) / (NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS net_points,
        VP2.prop ,
        S.points,
        (NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS divisio ,
        VP2.new_tax

这是代码的第一部分,我认为是错误所在。

结果是:

+---------+------------+------+--------+----------+----------+
| avg_tax | net_points | prop | points |  divisio |  new_tax |
+---------+------------+------+--------+----------+----------+
|    1.23 |  43.902439 |    1 |   5442 |     1.23 |       23 |
+---------+------------+------+--------+----------+----------+

如您所见,通过手工计算,net_points 处的结果应为:5442/100 * 1 / 1.23 = 44.2439。

为什么会这样?

标签: sqlcalculated-columnssqldatatypes

解决方案


您不指定数据库或数据类型,但某些数据库会进行整数除法。作为一种习惯,我通常在常量中包含小数点以确保:

    VP2.prop * (S.points / 100.0) / (NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS net_points,

推荐阅读