我在 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
除了最后两个之外,看起来它对所有这些都进行了正确排序
有任何想法吗?
谢谢
我在 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)
但我不确定他们将如何处理该领域的非数字。您可能想研究使用该lpad
功能:
order by lpad (t.league, 20, '0')
0
这将通过在字段前面加上字符来将字段填充到特定大小。
请记住,每行函数很少能很好地扩展,因此,如果您想在表变大时保持性能,您可能需要执行一些操作,例如将列拆分为组件,使数字的非文本。根据您的具体情况,这可能有效,也可能无效。
是的,该列必须是字符串类型并且5
出现在 AFTER 之后11
。a
您可能会考虑将这些字段(似乎是多值的)更改为 2 个单独的数字字段(如果该值有任何区别,甚至可以更改为 3个)