一連の文字 {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;
つまり、最初の文字を次の 2 文字と比較します。0
1 番目と 2 番目の文字が異なる場合、上記は を返します。1
、1 番目と 2 番目が同じで、3 番目が異なる場合。および2
3 文字のプレフィックスの場合。