我在这里使用 mysql 工作台构建了一个查询:
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
然后显示以下结果:
正如您所看到的,它将球员进球数列排序为 9,而不是 20。按整数排序该列的最佳方法是什么,所以 20 位于列表的顶部?
试试这个订单声明
ORDER BY PLA_GS + 0 desc
演员表是合适的解决方案,这可能适用于懒惰的人:
ORDER BY PLA_GS+0 DESC
感谢大家的帮助。问题是该列是错误的数据类型,如先前在评论中所述。这是通过将 column 设置为 int 来解决的:
ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3);
然后运行查询:
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
给我正确排序的结果。
尝试这个:
ORDER BY Cast(PLA_GS as int) DESC
询问:
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY Cast(PLA_GS as int) DESC;
当使用文本数据类型存储数字时,会发生这种“排序错误”(1)。命令
DESCRIBE player;
除其他信息外,还显示了用于每列的数据类型,并且可能会显示一些文本数据类型,例如varchar
在这种情况下。
如果您有权更改表结构,请改用数字数据类型,例如int
. 这将解决您的排序问题。
此外,您将节省一些硬盘空间并加快查询速度。int
s 所需的内存远少于以 ascii 格式保存数字(使用 eg. 时会发生这种情况varchar
),并且比较整数比比较(可能很长)文本元素要快得多。
如果您无权更改表结构,请使用其他答案中已提供的转换技巧。
(1) 实际上不是错误。只是按字符排序。