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.

Jeff Gortmaker
sumber
3
Kemungkinan rangkap dari MySQL: Hitung kemunculan nilai yang berbeda
Oleg V. Volkov

Jawaban:

311
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category
Dan Grossman
sumber
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