SQL: Làm thế nào để có được số lượng của từng giá trị riêng biệt trong một cột?


175

Tôi có một bảng SQL được gọi là "bài viết" trông như thế này:

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

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

Ví dụ: một truy vấn như vậy có thể trả về một mảng tượng trư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 từng danh mục có thể, chẳng hạn như : SELECT COUNT(*) AS num FROM posts WHERE category=#, và sau đó kết hợp các giá trị trả về thành 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.


Câu trả lời:


310
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category

3
Cảm ơn! Nó đơn giản hơn tôi nghĩ rất nhiều!
Jeff Gortmaker

4
@MichelAyres: nguồn?
Moberg

5
"Đó là, tiêu chuẩn ANSI công nhận nó là chảy máu rõ ràng theo ý bạn. COUNT (1) đã được các nhà cung cấp RDBMS tối ưu hóa vì sự mê tín này. Nếu không, nó sẽ được đánh giá theo ANSI" Count (*) so với Count (1)
Michel Ayres

@Moberg Đó là cách tôi học (người già dạy mê tín ...). Đây là một phần nhỏ của cuộc trò chuyện để thảo luận về nó
Michel Ayres

1
Nó hoạt động "ở đó" khi bạn sử dụng tên cột và bảng tồn tại trong ví dụ.
Dan Grossman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.