MySQL 排序 : why is "5x" after "11x"?

标签 mysql sql sql-order-by

我在 MYSQL 中有一个表,其中有一列名为 league。

当我尝试使用此查询对值进行排序时,无法正确排序。

SELECT DISTINCT (
t.league
)
FROM teams t
GROUP BY t.league
ORDER BY t.league ASC 

然而,我得到:

11a12
13
14
15
16a17
5a7
8a10

除了最后两个,它看起来对所有的都正确排序

有什么想法吗?

谢谢

最佳答案

不,它们是按字典顺序而不是数字排序的:

11a12
13
14
15
16a17
5a7        # 5 is greater than 1
8a10

如果你想对它们进行数字排序,你可以使用像这样的东西:

order by (t.league + 0)
order by cast (t.league, int)

但我不确定他们将如何处理现场的非数字。您可能想研究使用 the lpad function :

order by lpad (t.league, 20, '0')

这将通过在字段前加上 0 个字符来将字段填充到特定大小。

请记住,每行函数很少能很好地扩展,因此,如果您想在表的大小增长时保持性能,您可能需要做一些事情,比如将列拆分成组件,使数字成为非文本.根据您的具体情况,这可能有效也可能无效。

关于MySQL 排序 : why is "5x" after "11x"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021822/

相关文章:

mysql - 找不到我的错误

sql - 正或负 boolean 字段名称

mysql - 按最近日期的 ID 排序结果

MySQL 按字段排序

php - 当数据库中有两个日期时,如何按日期 DESC 查询 ORDER?

php - 将 DateTime 从 mySql 更改为 php 中的时间戳

javascript - 如何将用户输入输出到不同的网页?

java - 通过 Google DataFlow Transformer 查询关系数据库

sql - 同一个结果集中的不同表字段 Oracle

mysql - 加快数据插入速度