Mysqlにおいて、varchar項目に関数を利用すると変な結果になる場合があります。
![商品テーブル](https://apl-py.com/blog/wp-content/uploads/2016/06/fe3dd8c00abc08686b2195b5e57cdea4-240x115.jpg)
例) 左図のようなテーブルに対して
このSQLを発行すると↓
SELECT id ,max(shohin_no) FROM test_tbl GROUP BY id ;
↓こんな結果が返されます
![結果1](https://apl-py.com/blog/wp-content/uploads/2016/06/41cfdfc71c3c7a50c28b8b090219e393.jpg)
何故かというと、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](https://apl-py.com/blog/wp-content/uploads/2016/06/bd9703a7e8226dad026f3bc7819b1555-1.jpg)
こういった「ちょっとした罠」にハマらないように注意せねばです。