Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL按数字排序查询,不按整数排序_Mysql_Sql - Fatal编程技术网

mySQL按数字排序查询,不按整数排序

mySQL按数字排序查询,不按整数排序,mysql,sql,Mysql,Sql,我在这里使用mysql workbench构建了一个查询: 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

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

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

强制转换是合适的解决方案,这可能适用于懒惰的人:

ORDER BY PLA_GS+0 DESC

强制转换是合适的解决方案,这可能适用于懒惰的人:

ORDER BY PLA_GS+0 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;
试试这个:

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格式保存数字所需的内存要少得多(这是使用例如
varchar
时发生的情况),并且比较整数要比比较(可能是长的)文本元素快得多

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

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

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

DESCRIBE player;
除其他信息外,显示每列使用的数据类型,在本例中可能会显示一些文本数据类型,如
varchar

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

此外,还可以在硬盘上节省一些空间,加快查询速度
int
s比以ascii格式保存数字所需的内存要少得多(这是使用例如
varchar
时发生的情况),并且比较整数要比比较(可能是长的)文本元素快得多

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


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

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

给了我正确排序的结果

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

给了我正确排序的结果

PLA\u GS
列的类型是什么?显然您使用了错误的数据类型-将数字放入文本数据类型时会发生这种情况。将其设置为合适的数字数据类型,问题就迎刃而解了。
PLA_GS
列的类型是什么?显然,您使用了错误的数据类型-将数字放入文本数据类型时会发生这种情况。让它成为一个合适的数字数据类型,您的问题就会消失。