2009-09-08 64 views
5

Tôi đã thu thập một số mục nhập trong bảng cho mục đích rút thăm trúng thưởng. Tôi đã yêu cầu của khách hàng để cung cấp:MySQL Chọn số lượng mục nhập xuất hiện "N" lần

  • Số lượng mục duy nhất
  • Số lượng mục xảy ra hai lần.
  • Số lượng mục nhập xảy ra ba lần.

Tôi có thể xác định số lượng mục nhập duy nhất, nhưng không chắc chắn cách rút số lượng mục nhập xảy ra một số lần cụ thể. Tôi cố gắng một cái gì đó như thế này:

CHỌN email, count (email) AS NumberOfEntries
TỪ mục
GROUP BY NumberOfEntries

Điều đó cho các lỗi: Không thể nhóm vào 'NumberOfEntries'

tôi hy vọng sẽ thấy một cái gì đó như thế này:
SốOfEntries/Tổng số
1/1.000 (Có nghĩa là 1.000 người đã nhập một lần và chỉ một lần)
2/1,300 (Ý nghĩa 1.300 người tham gia d chính xác hai lần)

Cảm ơn bạn đã được trợ giúp!

Trả lời

5

Hãy thử:

SELECT numberOfEntries, count(*) FROM (
    SELECT email, count(*) AS numberOfEntries 
    FROM entries 
    GROUP BY email 
) 
GROUP BY numberOfEntries 

Bạn có thể thêm HAVING khoản để bên chọn để hạn chế tính cho số các mục trở lại 1,2,3 hoặc bất cứ điều gì khác.

3

Làm thế nào về điều này:

SELECT email, count(email) as NumberOfEntries 
FROM entries 
GROUP BY email 

sẽ cung cấp cho bạn một danh sách các email và số lần nhập cảnh (GROUP BY nên liệt kê tất cả các cột không tổng hợp). Nếu bạn muốn giới hạn lựa chọn chỉ với những email có 2 hoặc 3 mục bạn cần sử dụng mệnh đề có.

SELECT email, count(email) as NumberOfEntries 
FROM entries 
GROUP BY email 
HAVING NumberOfEntries = 2 

Hoặc, để có được một đếm số của mỗi mục, bạn có thể bọc trong một truy vấn như:

SELECT NumberOfEntries, COUNT(*) AS NumberOfEmails 
FROM (SELECT email, count(email) as NumberOfEntries 
    FROM entries 
    GROUP BY email) AS x 
GROUP BY NumberOfEntries 
ORDER BY NumberOfEntries ASC 

này sẽ cho bạn số mục, và một số có bao nhiêu người có số lượng mục nhập đó (được liệt kê từ 1 mục nhập)

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