MySQL排序:“11x”后为什么是“5x”?

时间:2012-04-05 02:17:21

标签: 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

除了最后两个

之外,它看起来正确排序所有这些

有什么想法吗?

感谢

2 个答案:

答案 0 :(得分:5)

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

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个字符。

请记住,每行函数很少能很好地扩展,所以如果你想在表的大小增加时保持性能,你可能想要做一些事情,比如将列拆分成组件,使数字非文本。视具体情况而定,可能有效,也可能无效。

答案 1 :(得分:4)

是的,列必须是字符串类型,5来自11。您可以考虑将这些字段(似乎是多值的)更改为2个单独的数字字段(如果a值有任何差异,甚至可以更改3个字段)