mySQL按编号查询,不按整数排序

时间:2013-03-17 17:23:59

标签: mysql sql

我在这里使用mysql workbench构建了一个查询:

USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;

然后显示以下结果:

enter image description here

正如你所看到的,它将玩家目标评分列排序为9是最高值,而不是20。什么是按整数排序此列的最佳方式,因此20位于列表的顶部?

5 个答案:

答案 0 :(得分:7)

试试此订单声明

ORDER BY PLA_GS + 0 desc

答案 1 :(得分:0)

演员阵容是合适的解决方案,这可能适用于懒惰:

ORDER BY PLA_GS+0 DESC

答案 2 :(得分:0)

试试这个:

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;

答案 3 :(得分:0)

当使用文本数据类型存储数字时,会出现“排序错误”(1)。命令

DESCRIBE player;
除其他信息外,

还显示了每列使用的数据类型,在这种情况下可能会显示一些文本数据类型,如varchar

如果您有权更改表格结构,请使用数字的数字数据类型,例如int。这将解决您的排序问题。

此外,您还可以节省硬盘空间并加快查询速度。 int需要的内存远远少于以ascii格式保存数字的内存(使用例如。varchar时会发生这种情况),比较整数比比较(可能很长)的文本元素要快得多。

如果您无权更改表格结构,请使用其他答案中已提供的强制转换技巧。

(1)实际上并不是错误。只是字符排序。

答案 4 :(得分:0)

谢谢大家的帮助。问题是该列是错误的数据类型,如之前在评论中所述。通过将列设置为int:

来解决此问题
ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3);

然后运行查询:

SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;

给我正确订购的结果。