เมื่อคอลัมน์ ID เก็บเป็น VARCHAR แตค่าเป็นตัวเลขทั้งหมด การใช้ MAX() ตรงๆ จะเรียงแบบ String (Lexicographic) ได้ผลผิด (เช่น '9' > '100') ต้อง CAST เป็นตัวเลขก่อน
ปัญหา: MAX บน VARCHAR
SELECT MAX(UserMarks) FROM DemoTable; -- ผล: '99' (String Compare) แต่ '9' > '100'!
สร้างตารางและข้อมูล
mysql> create table DemoTable (UserMarks varchar(20));
mysql> insert into DemoTable values('77'),('98'),('45'),('56'),('89'),('99'),('91'),('94');
ข้อมูลในตาราง
+-----------+ | UserMarks | +-----------+ | 77 | | 98 | | 45 | | 56 | | 89 | | 99 | | 91 | | 94 | +-----------+
คำสั่งถูกต้อง: CAST แล้ว MAX
mysql> SELECT MAX(CAST(UserMarks AS SIGNED)) AS MAX_VALUE from DemoTable;
ผลลัพธ์: 99 (ถูกต้อง)
+-----------+ | MAX_VALUE | +-----------+ | 99 | +-----------+
CAST Types
| Type | Range | ใช้เมื่อ |
|---|---|---|
| SIGNED | -2^63 ~ 2^63-1 | Integer ทั่วไป (มีเครื่องหมาย) |
| UNSIGNED | 0 ~ 2^64-1 | Integer ไม่ติดลบ (ID, Count) |
| DECIMAL(p,s) | Precision, Scale | ทศนิยมแม่นยำ (Money) |
| DOUBLE | Floating Point | วิทยาศาสตร์ (ประมาณ) |