SQL: Bir sütundaki her bir ayrı değerin sayımı nasıl alınır?


176

Ben böyle görünüyor "yazılar" adlı bir SQL tablo var:

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

Her kategori numarası bir kategoriye karşılık gelir. Tek bir sql sorgusunda her kategorinin bir yayında kaç kez göründüğünü saymayı nasıl deneyebilirim ?

Örnek olarak, böyle bir sorgu aşağıdaki gibi sembolik bir dizi döndürebilir: (1:3, 2:2, 3:1, 4:1)


Şu anki yöntemim, olası her kategori için sorguları kullanmaktır, örneğin: SELECT COUNT(*) AS num FROM posts WHERE category=#ve sonra dönüş değerlerini bir son dizide birleştirmektir. Ancak, yalnızca bir sorgu kullanan bir çözüm arıyorum.


Yanıtlar:


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

3
Teşekkürler! Düşündüğümden çok daha basitti!
Jeff Gortmaker

4
@MichelAyres: kaynak?
Moberg

5
"Yani, ANSI standardı bunu kastettiğinizin kanaması olarak kabul ediyor. COUNT (1), bu batıl inanç nedeniyle RDBMS satıcıları tarafından optimize edildi. Aksi takdirde ANSI'ye göre değerlendirilecek" Count (*) vs Count (1)
Michel Ayres

@Moberg Bu şekilde öğrendim (yaşlılar batıl inançlar öğretiyor ...). İşte bununla ilgili bir tartışma için sohbetin küçük bir kısmı
Michel Ayres

1
Örnekte bulunan sütun ve tablo adlarını kullandığınızda "orada" çalışır.
Dan Grossman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.