2009-08-01 31 views
22

Bảng của tôi có hai cột: id và name. Các dữ liệu trông như thế này:Chọn các kết quả riêng biệt hàng đầu được sắp xếp theo tần suất

id | name 
---------- 
1 Jeff 
2 Sam 
3 Carl 
4 Sam 
5 Carl 
6 Jeff 
7 Dave 
8 Jeff 

Những gì tôi muốn có được là thế này:

name | frequency 
---------------- 
Jeff  3 
Carl  2 
Sam  2 
Dave  1 

Về cơ bản, tôi cần một truy vấn SQL mà đếm những cái tên độc đáo trong bảng, và sắp xếp chúng bằng frequnecy của họ . Tôi đang sử dụng MySQL nếu nó quan trọng.

Cảm ơn bạn.

Trả lời

25

tôi đã không kiểm tra nó, vì vậy cú pháp có thể không được hoàn hảo, nhưng những gì về một cái gì đó như thế này:

select name, count(*) as frequency 
from your_table 
group by name 
order by count(*) desc 

nên cung cấp cho bạn tên duy nhất và số lượng tương ứng thời gian họ appeat trong bảng, ra lệnh bằng con số

+1

Điều này hiệu quả. Cảm ơn nhiều. –

+1

Bạn được chào đón :-) –

+0

Chỉ một mệnh đề đơn hàng bổ sung có thể giống như "thứ tự theo tần số desc" cũng như – Elnoor

13

Bạn cần phải sử dụng một GROUP BY:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC; 

này sẽ GROUP BYname (bất kỳ phi tổng hợp các cột cần được đặt tên theo mệnh đề GROUP BY) và sau đó COUNT tần số của mỗi name.

Nếu bạn muốn chỉ là top 25, sau đó bạn có thể tiến hành thêm một điều khoản LIMIT như vậy:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC 
LIMIT 25; 

Thông tin thêm về các khoản GROUP BY có sẵn trong tay MySQL:

12.2.8 SELECT Syntax

+0

Cảm ơn bạn, Andrew. Rất tốt đẹp của bạn. –

Các vấn đề liên quan