1

我在这里使用 mysql 工作台构建了一个查询:

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

然后显示以下结果:

在此处输入图像描述

正如您所看到的,它将球员进球数列排序为 9,而不是 20。按整数排序该列的最佳方法是什么,所以 20 位于列表的顶部?

4

5 回答 5

7

试试这个订单声明

ORDER BY PLA_GS + 0 desc
于 2013-03-17T17:26:01.547 回答
0

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

ORDER BY PLA_GS+0 DESC
于 2013-03-17T17:27:19.847 回答
0

感谢大家的帮助。问题是该列是错误的数据类型,如先前在评论中所述。这是通过将 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;

给我正确排序的结果。

于 2013-03-18T01:38:50.730 回答
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;
于 2013-03-17T17:47:01.723 回答
0

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

DESCRIBE player;

除其他信息外,还显示了用于每列的数据类型,并且可能会显示一些文本数据类型,例如varchar在这种情况下。

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

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

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

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

于 2013-03-17T17:49:51.133 回答