2011-11-25 15 views
8

Ho la seguente interrogazioneMySQL GROUP di Regex?

SELECT Count(*) as Total_Count, Col1 
FROM Table1 
GROUP BY Col1 
ORDER BY Total_Count DESC; 

voglio ingrandire Col1. I dati in Col1 sono nel seguente formato:

text-abc1 
txt4-abcde22 
tex6-abc2 
text4-imp4 
text-efg1 
txt-efg43 

Voglio essere in grado di gruppo facendo

After the first `-`, any first three/four/five characters match 

In questo esempio, se abbiniamo con primi 3 caratteri. L'output sarà:

Total_Count Col1 
3    abc 
1    imp 
2    efg 

Qualsiasi altro modo per raggiungere questo obiettivo?

risposta

9

Potrebbe non essere necessario un regex, solo operazioni con le stringhe. Per tre caratteri:

SELECT count(*) AS Total_Count, 
SUBSTRING(Col1 FROM POSITION('-' in Col1)+1 FOR 3) AS Col1_zoomed 
FROM Table1 
GROUP BY Col1_zoomed 
ORDER BY Total_Count DESC 
+0

Questo è quello giusto. Grazie per questo. Ma 'abcd-1234' deve essere' Col1'. Per favore cambiala così posso accettarla :). – theking963

+0

@ daking963 Come se questa risposta non ti aiutasse quando una cosa è scritta diversamente? Pignolo, schizzinoso! :-p – Wiseguy

+1

@Wiseguy Non si tratta di essere schizzinosi. È per la correttezza della risposta e un riferimento futuro per gli altri. Sono sicuro che possono capire che al posto della stringa dovrebbe essere il nome della colonna. È solo un refuso, Ian può cambiarlo facilmente. Per migliorare la qualità generale del sito, a mio avviso, queste piccole cose contano molto! – theking963

0

Questo dovrebbe fare quello che vuoi.

SELECT Count(*) as Total_Count, SUBSTRING(Col1, 1, 3) 
FROM Table1 
GROUP BY SUBSTRING(Col1, 1, 3) 
ORDER BY Total_Count DESC; 
+0

'SUBSTRING (Col1, 1, 3)' non funzionerà in questo caso poiché ho bisogno di abbinare i caratteri dopo '-'. Prima di '-' potrebbe esserci un numero qualsiasi di caratteri. – theking963

+0

Ho letto male la tua domanda - pensavo volessi il primo 3. La risposta di Ian è meglio allora –

3
select 
substring(substring_index(col1,'-',-1),1,3) as grp, 
count(*) as total 
from table 
group by grp