2016-04-21 4 views
2

EDIT:Wie GROUP BY einen String an MySQL

Angenommen, Sie in der folgenden Tabelle haben:

id string   number 
1 stuff::a::312 5 
2 stuff:::a::312 6 
3 stuff::a::233 2 
4 stuff:b::213 1 
5 stuff::b::222 1 
6 stuff::c  5 

Die folgende natürlich nicht funktioniert:

SELECT string, COUNT(*) 
FROM tbl 
-- WHERE 
GROUP BY string; 

Das gewünschte Ergebnis:

string numbers 
a  13 
b  2 
c  5 

Sorry, aber Bitte beachten Sie, dass nach c ist kein :: aber vor, genau wie der Rest

+0

links abbiegen können Sie auch 'verwenden LEFT (string, 10) 'wenn die Zeichen' stuff ::? :: 'vorne das Standardformat/die Länge der Werte in Ihrer Stringspalte sind. 'RIGHT (string, 3)' ist das umgekehrt :) – rhavendc

Antwort

2

Wenn das Muster gleiche ist, können Sie etwas wie

select 
substring_index(string,'::',1) as string_val, 
sum(number) as number 
from mytable 
group by string_val 
+0

Das funktioniert wie ein Zauber! Da ich den "suff :: a ::" hinzugefügt habe, ist der substring_index (string, '::', 2) die richtige Antwort für meinen Fall. Vielen Dank! –

+0

Nun, wenn das Muster wie in Ihrer Frage geändert wird, dann brauchen Sie etwas wie 'substring_index (substring_index (string,' :: ', 2),' :: ', - 1) ' –

0

Sie es mit SUBSTRING_INDEX tun können() wie folgt aus:

SELECT string, COUNT(*) 
FROM tbl 
-- WHERE 
GROUP BY SUBSTRING_INDEX(string, '::', 1); 
0

Bitte versuchen Sie folgendes:

select substr(string,1,1) 
    , count(*) 
    from tbl 
group by 1 
    ; 
0

verwenden Sie einfach substr hierfür:

SELECT substr(string,1, 1), COUNT(*) 
FROM tbl 
-- WHERE 
GROUP BY substr(string,1, 1); 

Oder anspruchsvollere SUBSTRING_INDEX:

SELECT SUBSTRING_INDEX(string, '::', 1), COUNT(*) 
FROM tbl 
-- WHERE 
GROUP BY SUBSTRING_INDEX(string, '::', 1); 
0
select left(string,1),count(*) from table where string is not null group by left(string,1) order by left(string,1) 

Ich hoffe, tun dies hilft, LEFT (string) wird nur die meisten Zeichen

+0

Das funktioniert tatsächlich, wenn ich die Zeichen aus zählen die Linke, danke. Aber keine Ahnung, ob die Anzahl der Zeichen von links unbekannt ist? –