我在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
除了最后两个
之外,它看起来正确排序所有这些有什么想法吗?
感谢
答案 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个字段)