2011-11-25 190 views
8

我有以下查询MySQL GROUP by Regex?

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

我想放大Col1中。在Col1中的数据是按以下格式:

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

我希望能集团通过其

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

在这个例子中,如果我们用前3个字符相匹配。输出将是:

Total_Count Col1 
3    abc 
1    imp 
2    efg 

任何其他方式来实现这一目标?

回答

9

你可能不需要一个正则表达式,只是字符串操作。对于三个字符:

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

这是正确的。感谢它。但'abcd-1234'必须是'Col1'。请改变它,以便我可以接受它:)。 – theking963

+0

@ daking963就好像这个答案不能帮助你,当一件事拼写不同?挑剔,挑剔! :-p – Wiseguy

+1

@Wiseguy这不关乎挑剔。这是为了答案的正确性和其他人的未来参考。我相信他们可以弄清楚,而不是字符串,它应该是列名。这只是一个错字,伊恩可以轻易改变它。为了提高网站的整体质量,在我看来,这些小事情非常重要! – theking963

0

这应该做你想做的。

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)'在这种情况下不起作用,因为我需要在'-'之后匹配字符。在'-'之前可以有任意数量的字符。 – theking963

+0

我误解了你的问题 - 我以为你想要第一个3.伊恩的答案是更好的 –

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