MySQL,Max似乎没有工作?

时间:2010-08-24 14:42:48

标签: mysql

我有一个包含数据的表,其中一个字段是'class'

当我这样做时:

select* from cvs where `Player ID` = <a_number> 

我得到的数据包含从1到10的班级编号

如果我那么

select max(`Class`) from cvs where `Player ID` = <a_number>

它返回9而不是10?

我删除了第10类数据,它仍然返回9,我删除了第9类数据并返回8

Class是varchar(50)

发生了什么事?

2 个答案:

答案 0 :(得分:2)

如果您的类字段仅填充了整数,请尝试:

select max(cast(Class as UNSIGNED)) 
from cvs 
where `Player ID` = <a_number> 

MySQL正在进行字母数字排序而不是数字排序,因为它是一个varchar。比较第一个字符时,'9'大于'1',因此会在'10'之后排序。

理想情况下,如果数据是数字,则应使用适当的数字类型而不是varchar存储。这也可以避免问题,因为在Class列中插入了一个非整数值,现在正常工作的查询将停止运行。

答案 1 :(得分:0)

它不是一个int,所以它按字母顺序排列它们。和9> 1。

或者:

cast(variable as int)

convert(int, variable)