我在这里使用mysql workbench构建了一个查询:
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
然后显示以下结果:
正如你所看到的,它将玩家目标评分列排序为9是最高值,而不是20。什么是按整数排序此列的最佳方式,因此20位于列表的顶部?
答案 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;
给我正确订购的结果。