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

例) 左図のようなテーブルに対して
このSQLを発行すると↓
SELECT id ,max(shohin_no) FROM test_tbl GROUP BY id ;
↓こんな結果が返されます

何故かというと、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が最も大きい値を取得できました!

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