mysql的强制求和

avkwfej4  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(280)

嗨,我是一个mysql初学者这是我的查询得到的总和,但不知怎么的计算是不对的。如果有什么能启发我的话,也许是错的

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

bqucvtff1#

1) 请使用适当的数字列类型作为表r中预订列的总和。如果预订列类型的sum\u total\u实际上是数字,那么只需跳到我的下一点:
2) “0”不是数字。这是一根绳子。在这里,您尝试对的所有值求和(将未定义的列值(aka null)转换为字符串“0”,然后尝试将其转换为十进制,这也会在内部触发字符串到数字的转换尝试)
相反,您应该:

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))

但这是毫无意义的,因为上面提到的
无论哪种方法,都要尽量避免数据类型和列定义不匹配,以及在将数值作为字符串输入数学公式或聚合函数时避免强制转换或自动转换(domne静默)。

相关问题