嗨,我是mysql的初学者,这是我获取总和的查询,但以某种方式计算不正确。如果可以启发我,也许是错误的
SUM(CAST(IF(r.sum_total_of_booking IS NULL, '0', r.sum_total_of_booking) AS DECIMAL(10,2)))
答案 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)。