MySQL,先对单个字母排序,然后对双字母排序,然后对三字母排序

标签 mysql sorting

给定一组字母 {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;

也就是说,将第一个字符与接下来的两个字符进行比较。当第一个和第二个字符不同时,上面返回01,当第一个和第二个相同但第三个不同时; 2 表示三个字符前缀。

关于MySQL,先对单个字母排序,然后对双字母排序,然后对三字母排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070186/

相关文章:

java.sql.SQLException : No suitable driver found for jdbc:mysql

sql - 使用一张小表的值更新一张大表的性能

java - 在 Java 中使用 stream.sorted() 对列表进行排序

swift - 按 Swift 3 部分的字母顺序对 tableView 中的 Realm 数据进行排序

ios - 如何对项目进行排序,以便在 UICollectionView 的每一行上浪费尽可能少的空间?

python - glob.iglob 结果按名称排序?

java - 如何实现比较器以在 android 或 java 中对对象进行排序

mysql - Tomcat缩放应用程序无法连接MySQL数据库

php - 将其从每月重置更改为每天重置?

mysql - 是否可以使用 Mysql2 gem 更改所选数据库?