今天在客戶反饋線上數據出現了異常,如下圖所示,正常值應該是百分百以內的,而且這個數值是隨機出現的,刷新幾下可能出現一次。
然後和後端在檢查了數據後,發現了select sum() 數據會隨機出現不同的結果,而且是多次刷新後會出現的,再其次檢查數據,發現了數據中有NULL值,然後參考了其他網友的分享,發現sum中,Number+null =null,求平均函數avg() 也會出現這樣的結果。
解決辦法如下:
1. 使用case when else 控制語句,如 case when sum(cnt) is null then 0 else sum(cnt) end"來代替sum(cnt)。
2. 使用COALESCE函數進行判斷,如COALESCE(SUM(name),0),COALESCE函數的意思是返回參數列表中第一個爲空的值,該方法允許傳入多個參數,該函數也是SQL中的標準函數。 如下所示:
SELECT COALESCE(SUM(name),0) FROM person WHERE id > 0
3. 使用 IFNULL 函數,如 sum( IFNULL(cnt,0) ) ,即判定數值中如果有null值,則返回0來參與計算。