2009-08-28 64 views
159

Tôi đang cố gắng tìm một truy vấn MySQL sẽ tìm các giá trị riêng biệt trong một trường cụ thể, đếm số lần xuất hiện của giá trị đó và sau đó sắp xếp kết quả theo số.MySQL: Đếm số lần xuất hiện của các giá trị riêng biệt

dụ db

id   name 
-----  ------ 
1   Mark 
2   Mike 
3   Paul 
4   Mike 
5   Mike 
6   John 
7   Mark 

dự kiến ​​kết quả

name  count 
-----  ----- 
Mike  3 
Mark  2 
Paul  1 
John  1 

Cảm ơn

Trả lời

317
SELECT name,COUNT(*) as count FROM tablename GROUP BY name ORDER BY count DESC; 
+1

Nhóm chính xác bằng cách làm gì ở đây? Không rõ mục đích là gì? Có vẻ như nó nên làm việc với nó nếu bạn chỉ đọc nó rõ ràng. – Prospero

+16

Trong khi truy vấn của Amber là câu trả lời đúng cho câu hỏi, tôi muốn thực hiện một sửa chữa trên bình luận của mình để tránh những người mới lạc lối. Nếu bạn bỏ "nhóm theo" trong truy vấn MySQL, bạn sẽ không nhận được [Mike, 1], [Mike, 1], bạn nhận được một kết quả duy nhất sẽ là tên trên hàng FIRST trả về và đếm số hàng trong bảng, vì vậy trong trường hợp này là [Mark, 7]. count(), dưới dạng hàm tổng hợp hoạt động trên toàn bộ tập dữ liệu, tổng hợp, đếm hoặc phối hợp trường được chỉ định xuống một hàng. Nhóm bằng cách chia nhỏ tập dữ liệu thành các khối dựa trên các combo độc đáo của các trường được chỉ định –

+0

@Avatar_Squadron Khá đúng; Tôi đã xóa nhận xét trước đó - nó đã nằm ngoài đầu của tôi, và tôi không có xu hướng thực sự quan sát kết quả đếm mà không có nhóm nhiều. :) – Amber

9

những gì về một cái gì đó như thế này:

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

nghĩa là bạn đang chọn tên và số lần nó xuất hiện; nhưng nhóm theo tên để mỗi tên chỉ được chọn một lần.

Sau đó, bạn đặt hàng theo số lần, desc; để có người dùng xuất hiện thường xuyên nhất đến trước.

+0

Truy vấn của bạn đã giúp tôi. Nó trả về một vài hàng như là kết quả. Tôi cũng muốn biết cách tìm số lượng kết quả này. Đã thử một vài truy vấn nhưng có vẻ như không thể đếm được tổng số. Bạn có thể giúp với điều đó? – Nav

+0

@Nav - số lượng những gì? Số hàng được trả về? Đó là 'SELECT COUNT (DISTINCT name) khi đếm FROM your_table' Để đếm tổng số hàng của bảng, hãy truy vấn Pascal mà không có câu lệnh' group by'. –

+0

Thật là một sự khác biệt trong một phút! –

0

Chỉ cần thay đổi COUNT (*) thành COUNT (1) của Amber để có hiệu suất tốt hơn.

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC; 
Các vấn đề liên quan