本文主要是介绍【踩坑日常】-- clickhouse DB::Exception: Division by zero: while executing ‘FUNCTION divide,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
场景:
开发中写了带除法的SQL
问题描述
在遇到validRoomArea
为空的情况,就会出现DB::Exception: Division by zero: while executing 'FUNCTION divide
异常
原因分析:
使用case when
或者 if
进行判断,依旧还是报错
原因可能还是跟Decimal底层的存储结构有关,底层应该做了限制,并且在除法运算中
无论条件如何,都会评估 if() 的 else 参数
解决方案:
既然无论条件是什么,都会评估 if() 的 else 参数,那么在扫描的时候,加判断转化为数字,避免报错
select sum((casewhen room_total_price > 0 and room_area > 0 and room_num > 0 then room_areaelse null end)) as validRoomArea,sum((casewhen room_total_price > 0 and room_area > 0 and room_num > 0 then room_total_priceelse null end)) as validTotalPrice,if(validRoomArea<>0, validTotalPrice/(validRoomArea+if(validRoomArea<>0,0,1)), null) as dealPrice,C.board_id as boardId
FROM house.dwd_house_deal_new as A
这篇关于【踩坑日常】-- clickhouse DB::Exception: Division by zero: while executing ‘FUNCTION divide的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!