SQL: ¿Cómo obtener el recuento de cada valor distinto en una columna?


176

Tengo una tabla SQL llamada "posts" que se ve así:

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

Cada número de categoría corresponde a una categoría. ¿Cómo haría para contar el número de veces que aparece cada categoría en una publicación, todo en una consulta SQL ?

Como ejemplo, dicha consulta podría devolver una matriz simbólica como esta: (1:3, 2:2, 3:1, 4:1)


Mi método actual es usar consultas para cada categoría posible, como: SELECT COUNT(*) AS num FROM posts WHERE category=#y luego combinar los valores de retorno en una matriz final. Sin embargo, estoy buscando una solución que use solo una consulta.


Respuestas:


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

3
¡Gracias! ¡Era mucho más simple de lo que pensaba!
Jeff Gortmaker

44
@MichelAyres: fuente?
Moberg

55
"Es decir, el estándar ANSI reconoce que es evidente lo que quiere decir. COUNT (1) ha sido optimizado por los proveedores de RDBMS debido a esta superstición. De lo contrario, se evaluaría según ANSI" Count (*) vs Count (1)
Michel Ayres

@Moberg Así fue como aprendí (personas mayores enseñando supersticiones ...). Aquí hay una pequeña parte del chat para una discusión al respecto
Michel Ayres

1
Funciona "allí" cuando usa nombres de columnas y tablas que existen en el ejemplo.
Dan Grossman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.