2011-11-25 29 views
8

Tôi có truy vấn sauMySQL GROUP của Regex?

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

Tôi muốn phóng to Col1. Các dữ liệu trong col1 là trong các định dạng sau:

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

Tôi muốn để có thể nhóm nó bằng cách

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

Trong ví dụ này, nếu chúng ta phù hợp với 3 ký tự đầu tiên. Đầu ra sẽ là:

Total_Count Col1 
3    abc 
1    imp 
2    efg 

Bất kỳ cách nào khác để đạt được điều này?

Trả lời

9

Bạn có thể không cần regex, chỉ hoạt động chuỗi. Đối với ba ký tự:

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

Đây là giải pháp phù hợp. Cảm ơn cho nó. Nhưng 'abcd-1234' cần phải là' Col1'. Hãy thay đổi nó để tôi có thể chấp nhận nó :). – theking963

+0

@ daking963 Như thể câu trả lời này không giúp bạn khi một điều được viết khác biệt? Picky, cầu kỳ! :-p – Wiseguy

+1

@Wiseguy Nó không phải về việc cầu kỳ. Đó là sự chính xác của câu trả lời và tham khảo trong tương lai cho người khác. Tôi chắc chắn rằng họ có thể hình dung ra rằng thay vì chuỗi nó phải là tên cột. Nó chỉ là một lỗi đánh máy, Ian có thể thay đổi nó một cách dễ dàng. Để cải thiện chất lượng tổng thể của trang web, theo ý kiến ​​của tôi, những điều nhỏ bé này quan trọng rất nhiều! – theking963

0

Điều này sẽ làm những gì bạn muốn.

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)' sẽ không hoạt động trong trường hợp này vì tôi cần khớp các ký tự sau '-'. Trước khi '-' có thể có bất kỳ số ký tự nào. – theking963

+0

Tôi hiểu sai câu hỏi của bạn - Tôi nghĩ bạn muốn câu trả lời đầu tiên 3. Câu trả lời của Ian tốt hơn –

3
select 
substring(substring_index(col1,'-',-1),1,3) as grp, 
count(*) as total 
from table 
group by grp 
Các vấn đề liên quan