Mysql中關於聚合函式sum()最新的認識
最近開發後臺介面的時候,需要做一個統計查詢,使用到sum()函式,資料庫中的表是以前已經設計好的,並且要進行統計查詢的那張表在其他一些介面中已經使用,mysql的版本是5.5.28,這是背景。
當寫介面寫sql語句時,才發現需要用sum()函式統計的那個欄位在表中設計好的資料型別是varchar型別,由於對聚合函式sum()認識不深,本以為直接統計會報錯,語句如下:
SELECT SUM(file_size) FROM res_material
但執行正常,上網搜尋時看到了這麼一句話“如果varchar型別中存放的都是數字,需要看是什麼資料庫,如果是sqlserver那麼可將字元轉成數字再進行sum,如果是oracle,則可隱形轉換成數字,無需修改語句”。雖然沒有搜尋到關於mysql中sum()函式也有隱形轉化的特點,但我使用的是Mysql,如上文所示我沒有在語句中加上cast()轉換型別的函式,執行結果依然正確,這應該能夠說明在mysql中的sum()函式與oracle一樣也有隱形轉化的特點(還需要學習)。
另外,經過測試,如果統計欄位中有的值不是數字,那麼也不會報錯,sum()函式只統計數字行。
且當語句加上cast()函式時,統計結果依然正確:
SELECT SUM(CAST(file_size AS DECIMAL(10,2))) AS file_size FROM res_material
補充一點:MySql sum(A+B)和sum(A)+sum(B)的區別 :
1.如果欄位A和欄位B的值都不為NULL,則以上兩種情況一樣
2.如果其中有一個欄位的值為NULL則sum(A+B)的值為NULL
學習中,如有不正確或不準確的地方,請多指正,謝謝