Dato un insieme di lettere {a, aa, b, bb, c, cc, bbb}
Vorrei ordinarli PRIMA con lettere singole, quindi doppie, quindi triple. All'interno di quel costrutto mi piacerebbe che fossero in ordine alfabetico.
Esempio:
a,b,c,aa,bb,cc,bbb
Per il mio caso d'uso, andrà solo fino a 3 lettere. Qualche idea?
risposte:
2 per risposta № 1Per i dati che hai fornito, puoi semplicemente usare la lunghezza:
order by length(letters),
letters;
Ciò presuppone che le lettere siano come descritte nella domanda, senza ulteriori lettere successive.
Se questi sono prefissi, l'approccio della forza bruta sarebbe:
order by ((substring(letters, 1, 1) = substring(letters, 2, 1)) +
(substring(letters, 1, 1) = substring(letters, 3, 1)
), letters;
Cioè, confronta il carattere iniziale con i due successivi. Quanto sopra ritorna 0
, quando il primo e il secondo carattere sono diversi; 1
, quando il primo e il secondo sono uguali ma il terzo è diverso; e 2
per tre prefissi di caratteri.