【mysql】-- mysql中MAX()和MIN()函式的使用之字串大小的比較
阿新 • • 發佈:2019-01-27
在維護別人的程式碼時,需求是對課程成績進行統計分析,並以柱狀圖的形式展現出來,需要表明該科成績的最高分和最低分。遇到一個問題就是,查出的結果很明顯不是最高和最低分。
使用的函式是MAX()和MIN(),部分sql語句和結果顯示為:
結果明顯不對,而且通過自己驗證,最高分為74.4 最低分為8.6
無論如何都不應該是圖中所示的結果。
一開始懷疑MAX(),MIN()函式使用不當造成的。於是查詢該函式的用法。發現數字最大最小值的判斷確實就這麼寫並沒有問題,而且之前判斷分數或者其他數字的最大最小值時也這麼寫的。不明所以。之後檢視該欄位(成績)的資料型別是VARCHAR型別的,才發現比較時不能單純使用MAX()和MIN()來比較字串的大小。所以結果才會出錯。雖然不知道為什麼他們設計成VARCHAR型別的,但是最後進行成績比較肯定比較的數值。
發現問題:
mysql字串大小比較:使用MAX()查詢一個字串型別的欄位時,字串型別大小比較是先比較首字元的ASCII碼的大小,然後依次往後進行比較的。
解決方案:
- MAX(total_score + 0)
- MAX(CAST(total_score as decimal(4,2))) as highScore 將字串轉換為decimal
結果一樣:
補充說明:
對字元型資料的最大值,是按照首字母由A~Z的順序排列,越往後,其值越大。當然,對於漢字則是按照其全拼拼音排列的,若首字元相同,則比較下一個字元,以此類推。
當然,對與日期時間型別的資料也可以求其最大/最小值,其大小排列就是日期時間的早晚,越早認為其值越小,