SQL: come ottenere il conteggio di ciascun valore distinto in una colonna?


176

Ho una tabella SQL chiamata "post" che assomiglia a questo:

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

Ogni numero di categoria corrisponde a una categoria. Come farei per contare il numero di volte in cui ogni categoria appare su un post in una query sql ?

Ad esempio, una query di questo tipo potrebbe restituire un array simbolico come questo: (1:3, 2:2, 3:1, 4:1)


Il mio metodo attuale è quello di utilizzare le query per ogni possibile categoria, come ad esempio:, SELECT COUNT(*) AS num FROM posts WHERE category=#e quindi combinare i valori restituiti in un array finale. Tuttavia, sto cercando una soluzione che utilizza solo una query.


Risposte:


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

3
Grazie! Era molto più semplice di quanto pensassi!
Jeff Gortmaker,

4
@MichelAyres: fonte?
Moberg,

5
"Cioè, lo standard ANSI lo riconosce come sanguinante ovvio cosa intendi. COUNT (1) è stato ottimizzato dai fornitori di RDBMS a causa di questa superstizione. Altrimenti sarebbe valutato secondo ANSI" Count (*) vs Count (1)
Michel Ayres,

@Moberg È stato come ho imparato (gli anziani insegnano le superstizioni ...). Ecco una piccola parte della chat per una discussione al riguardo
Michel Ayres,

1
Funziona "lì" quando si utilizzano i nomi di colonne e tabelle presenti nell'esempio.
Dan Grossman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.