0

我在 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

除了最后两个之外,看起来它对所有这些都进行了正确排序

有任何想法吗?

谢谢

4

2 回答 2

5

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

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

如果要按数字对它们进行排序,可以使用以下内容:

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

但我不确定他们将如何处理该领域的非数字。您可能想研究使用lpad功能

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

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

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

于 2012-04-05T02:20:00.433 回答
4

是的,该列必须是字符串类型并且5出现在 AFTER 之后11a您可能会考虑将这些字段(似乎是多值的)更改为 2 个单独的数字字段(如果该值有任何区别,甚至可以更改为 3个)

于 2012-04-05T02:19:38.633 回答