Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过正则表达式的MySQL组?_Mysql_Regex_Database_Group By - Fatal编程技术网

通过正则表达式的MySQL组?

通过正则表达式的MySQL组?,mysql,regex,database,group-by,Mysql,Regex,Database,Group By,我有以下疑问 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 ch

我有以下疑问

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

要实现这一点,还有其他方法吗?

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

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

这应该是你想要的

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

子字符串(Col1,1,3)
在这种情况下不起作用,因为我需要匹配
-
后面的字符。在
-
之前可以有任意数量的字符。我误解了你的问题-我以为你想要前3个。伊恩的答案比我的好这是正确的答案。谢谢你。但是
abcd-1234
需要是
Col1
。请把它改一下,这样我就可以接受:)@daking963,就好像当一件事拼写不同时,这个答案对你没有帮助一样?挑剔,挑剔!:-p@Wiseguy这不是吹毛求疵。这是为了确保答案的正确性,并为其他人提供未来的参考。我相信他们会明白,应该是列名而不是字符串。这只是一个打字错误,伊恩可以很容易地修改。为了提高网站的整体质量,在我看来,这些小事很重要!完成:)抱歉,这是我的shell测试样本数据
select
substring(substring_index(col1,'-',-1),1,3) as grp,
count(*) as total
from table
group by grp