如果mysql,

时间:2018-10-23 11:48:19

标签: mysql sum

嗨,我是mysql的初学者,这是我获取总和的查询,但以某种方式计算不正确。如果可以启发我,也许是错误的

SUM(CAST(IF(r.sum_total_of_booking IS NULL, '0', r.sum_total_of_booking) AS DECIMAL(10,2)))

1 个答案:

答案 0 :(得分:1)

1)请对表r中的sum_total_of_booking列使用适当的NUMERIC列类型。如果sum_total_of_booking列的类型实际上是数字,则只需跳到我的下一个点:

2)'0'不是数字。这是一个字符串。 在这里,您尝试将(将未定义的列值(也称为NULL)铸造为字符串'0')的所有值求和,然后尝试将其强制转换为DECIMAL,这也会在内部触发字符串到数字的转换尝试

相反,您应该:

SELECT SUM(r.sum_total_of_booking) 
WHERE r.sum_total_of_booking IS NOT NULL [AND <the rest of conditions>];

SELECT SUM(IF(r.sum_total_of_booking IS NULL, 0.00, r.sum_total_of_booking))

但是,由于上面的 a

,这毫无意义。

这两种方法都应始终尝试避免数据类型和列定义不匹配,以及在将数值作为字符串输入数学方程式或聚合函数时,避免强制转换或自动转换(静默地进行domon)。