2016-04-21 100 views
2

編輯:如何GROUP BY字符串部分在MySQL

假設你有如下表:

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 

下當然不起作用:

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

希望的結果:

string numbers 
a  13 
b  2 
c  5 

對不起,但請注意,在C是沒有::但在此之前,就像其餘

+0

你也可以使用' LEFT(string,10)'如果前面的字符'stuff ::?::'是字符串列中的標準格式/值的長度。 '右(字符串,3)'是反之亦然:) – rhavendc

回答

2

如果圖案是相同的,你可以做一些事情作爲

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

這就像一個魅力!由於我添加了「suff :: a ::」substring_index(string,'::',2)是我的情況的正確答案。謝謝! –

+0

那麼,如果模式在你的問題中改變,那麼你需要一些'substring_index(substring_index(string,'::',2),'::', - 1)' –

0

你可以用SUBSTRING_INDEX()這樣做:

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

請嘗試以下方法:

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

只需使用SUBSTR此:

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

或者更復雜的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) 

我希望這有助於 LEFT(字符串)只需要最左邊的字符

+0

這實際上工作,如果我從左邊,謝謝。但是,如果從左側的字符數量是未知的任何想法? –