MySql错误,我可以';无法在更新查询时复制

MySql错误,我可以';无法在更新查询时复制,mysql,Mysql,有时,我并不总是收到以下错误: 1040-列“平均访问持续时间”不能为空 关于以下查询 UPDATE `visitors_stats` SET avg_visit_duration = if( avg_visit_duration =0, 41371, round( ( avg_visit_duration * ( visitors_number -1 ) +41371 ) / visitors_number, 2 ) ), max_visit_duration = if( 41371 >

有时,我并不总是收到以下错误:

1040-列“平均访问持续时间”不能为空 关于以下查询

UPDATE `visitors_stats` SET avg_visit_duration = if( avg_visit_duration =0, 41371, round( (
avg_visit_duration * ( visitors_number -1 ) +41371 ) / visitors_number, 2 )
),
max_visit_duration = if( 41371 > max_visit_duration, 41371, max_visit_duration ) ,
min_visit_duration = if( min_visit_duration =0, 41371, if( 41371 < min_visit_duration, 41371, min_visit_duration ) ) WHERE memberid = "74e57e4027c250edc9f1c4d38136d935" AND `date` = "2016-10-27"
有什么问题吗

更新:许多人回答问题可能来自

round((avg_visit_duration * ( visitors_number -1 ) +41371 ) / visitors_number, 2 )) 
但当平均访问持续时间=0时,访客数量始终为0,这由if条件固定

if( avg_visit_duration =0, 41371, round( ...
但是,我强制表格模拟访客数量=0时的情况,并收到不同的错误:

1365-除以0 这与我的初始错误不同:

1040-列“平均访问持续时间”不能为空 您正在使用:

(平均参观时间*(参观人数-1)+41371)/参观人数

当您的访客数量为0时,这将产生错误,并且不会计算
avg\u visit\u duration
的值。

根据:

发生错误时,所有数学函数都返回NULL

这意味着如果您的
round()
由于任何原因失败,它将是一个空值


如果
visitors\u number
为0,那么您实际上是在尝试除以0(一个大的“否”),这将抛出一个错误。

请养成习惯,SQL关键字使用大写字母,表名和列名使用小写字母。它使您的查询更具可读性。您似乎已经在create语句中这样做了。谢谢您的评论。这就是为什么我有if(avg_vision_duration=0…意思是访问者人数=0直接检查
访问者人数=0
,而不是
avg_vision_duration=0
,以防有此类问题的记录。
if( avg_visit_duration =0, 41371, round( ...