/ / MySQL, prima ordina le singole lettere, poi le doppie, quindi le triple: mysql, ordinamento, ordine

MySQL, ordina prima le singole lettere, poi le doppie lettere, quindi le triple lettere - mysql, ordinamento, ordine

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 № 1

Per 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.