2011-08-13 42 views
103

Tôi có một bảng SQL được gọi là "bài" trông như thế này:SQL: Cách nhận được số lượng của mỗi giá trị riêng biệt trong một cột?

id | category 
----------------------- 
1 | 3 
2 | 1 
3 | 4 
4 | 2 
5 | 1 
6 | 1 
7 | 2 

Mỗi số hạng mục tương ứng với một danh mục. Làm thế nào tôi sẽ đi về đếm số lần mỗi thể loại xuất hiện trên một bài viết tất cả trong một truy vấn sql?

Như một ví dụ, một truy vấn như vậy có thể trả về một mảng mang tính biểu tượng như thế này: (1:3, 2:2, 3:1, 4:1)


phương pháp hiện tại của tôi là sử dụng các truy vấn cho mỗi thể loại có thể, chẳng hạn như: SELECT COUNT(*) AS num FROM posts WHERE category=#, và sau đó kết hợp sự trở lại các giá trị vào một mảng cuối cùng. Tuy nhiên, tôi đang tìm một giải pháp chỉ sử dụng một truy vấn.

+1

có thể trùng lặp của [MySQL: Đếm lần xuất hiện của giá trị khác biệt] (https://stackoverflow.com/questions/1346345/mysql-count-occurrences-of-distinct-values) –

Trả lời

186
SELECT 
    category, 
    COUNT(*) AS `num` 
FROM 
    posts 
GROUP BY 
    category 
+2

Cảm ơn! Nó đơn giản hơn nhiều so với tôi nghĩ! –

+22

** COUNT (1) ** sẽ tốt hơn cho hiệu suất –

+3

@MichelAyres: nguồn? – Moberg

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