Mysqlにおいて、varchar項目に関数を利用すると変な結果になる場合があります。

商品テーブル

例) 左図のようなテーブルに対して

このSQLを発行すると↓

SELECT
  id
  ,max(shohin_no)
FROM
  test_tbl
GROUP BY
  id
;

↓こんな結果が返されます

結果1

何故かというと、shohin_noは、varchar型(いわゆる文字列型)であり、その場合のmax(最大値)判定は

1 
↓
10
↓
290   ### 290は最初の文字が2から始まる為、5と9より小さいと判定 
↓
50     
↓
90  ### 全部文字を並び替えた結果、 90の 9の部分(文字列)が一番大きいと判定

対策例) varchar型をnumber型(数値型)に変換する処理を追加します↓

SELECT
  id
  ,max(cast(shohin_no as unsigned))
FROM
  test_tbl
GROUP BY
  id
; 

↓無事にshouhin_noが最も大きい値を取得できました!

結果2

こういった「ちょっとした罠」にハマらないように注意せねばです。

おすすめの記事