给定一组字母 {a,aa,b,bb,c,cc,bbb}
我想先按单个字母排序,然后按两个字母排序,最后按三个字母排序。在该结构中,我希望它们按字母顺序排列。
示例:
a、b、c、aa、bb、cc、bbb
对于我的用例,它最多只能包含 3 个字母。有什么想法吗?
最佳答案
对于您提供的数据,您可以只使用长度:
order by length(letters),
letters;
这假设这些字母如问题中所述,之后没有其他字母。
如果这些是前缀,则强力方法将是:
order by ((substring(letters, 1, 1) = substring(letters, 2, 1)) +
(substring(letters, 1, 1) = substring(letters, 3, 1)
), letters;
也就是说,将第一个字符与接下来的两个字符进行比较。当第一个和第二个字符不同时,上面返回0
; 1
,当第一个和第二个相同但第三个不同时; 2
表示三个字符前缀。
关于MySQL,先对单个字母排序,然后对双字母排序,然后对三字母排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070186/