MySQL AVG()異常NULL值

mysql 在計算avg() 時 會自動將null值過濾掉不參與計算,

因爲NULL與數字不同0

從概念上講,它NULL意味着“缺失的未知值”,並且與其他值的處理方式略有不同。這就是像ignore s 這樣的聚合函數AVG()NULL

AVG()僅計算所有已知值的平均值。(= 不是 NULL =未知)

來自MySQL文檔

除非另有說明,否則組函數會忽略NULL值。

另外,請閱讀 MySQL手冊“3.3.4.6使用NULL值”一節中NULLs 概念。

爲了得到你想要的東西,你可能會這樣做

SELECT AVG(IFNULL(marks, 0)) FROM sample GROUP BY(name);

IFNULL()如果值爲NULL或通過該值,則返回計算的第二個參數。


關於概念存在更多常見的誤解NULL。這些也在本手冊的“5.5.3 NULL的問題”一節中進行了解釋:

  • 在SQL中,與任何其他值相比,“NULL”值永遠不會爲真,即使是“NULL”。包含“NULL”的表達式總是產生一個“NULL”值,除非在文檔中爲表達式中涉及的運算符和函數另有說明。

    ie:`NULL == 0`導致NULL而不是`true`。“NULL == NULL”也會導致NULL,而不是true。
  • 要搜索“NULL”的列值,不能使用`expr = NULL`測試。要查找“NULL”值,必須使用`IS NULL`測試。
  • 當使用`DISTINCT`,`GROUP BY`或`ORDER BY`時,所有`NULL`值都被視爲相等。
  • 使用`ORDER BY`時,首先顯示`NULL`值,如果指定`DESC`按降序排序則返回最後一個值。
  • 對於某些數據類型,MySQL特別處理NULL值。如果在`TIMESTAMP`列中插入`NULL`,則插入當前日期和時間。
  • 如果將“NULL”插入到具有“AUTO_INCREMENT”屬性的整數或浮點列中,則插入序列中的下一個數字。
  • 定義了“UNIQUE”鍵的列仍然可以包含多個“NULL”值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章