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.