SQL: Bagaimana cara menghitung setiap nilai yang berbeda di dalam kolom?


176

Saya memiliki tabel SQL yang disebut "posting" yang terlihat seperti ini:

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

Setiap nomor kategori sesuai dengan suatu kategori. Bagaimana saya menghitung jumlah kali setiap kategori muncul pada posting semua dalam satu query sql ?

Sebagai contoh, kueri seperti itu mungkin mengembalikan array simbolik seperti ini: (1:3, 2:2, 3:1, 4:1)


Metode saya saat ini adalah menggunakan kueri untuk setiap kategori yang mungkin, seperti:, SELECT COUNT(*) AS num FROM posts WHERE category=#dan kemudian menggabungkan nilai kembali ke dalam array akhir. Namun, saya mencari solusi yang hanya menggunakan satu permintaan.


Jawaban:


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

3
Terima kasih! Itu jauh lebih sederhana daripada yang saya pikirkan!
— Jeff Gortmaker

4
@MichelAyres: sumber?
— Moberg

5
"Artinya, standar ANSI mengenalinya sebagai pendarahan yang jelas apa yang Anda maksud. COUNT (1) telah dioptimalkan oleh vendor RDBMS karena takhayul ini. Kalau tidak, itu akan dievaluasi sesuai ANSI" Hitung (*) vs Hitung (1)
— Michel Ayres

@Moberg Begitulah cara saya belajar (orang tua mengajar takhayul ...). Ini adalah bagian kecil dari obrolan untuk diskusi tentang hal itu
— Michel Ayres

1
Ini berfungsi "di sana" ketika Anda menggunakan nama kolom dan tabel yang ada dalam contoh.
— Dan Grossman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.