que tienen una tabla que se ve algo como esto:SQL - filas contando con valor específico
id value
1 0
1 1
1 2
1 0
1 1
2 2
2 1
2 1
2 0
3 0
3 2
3 0
Ahora para cada id
, quiero contar el número de ocurrencias de 0 y 1, y el número de ocurrencias de Identificación de que (el valor puede ser cualquier número entero), por lo que el resultado final debe ser algo como esto:
id n0 n1 total
1 2 2 5
2 1 2 4
3 2 0 3
he conseguido la primera y última fila con esta declaración:
SELECT id, COUNT(*) FROM mytable GROUP BY id;
Pero estoy algo perdido desde aquí. ¿Alguna sugerencia sobre cómo lograr esto sin una gran declaración?
¡Dulce, ni siquiera sabía que había un 'SUM (condición)'! – ryyst
@ryyst: Bueno, es un truco que aprovecha el hecho de que MySQL evalúa los resultados booleanos de las expresiones condicionales a 0 si es falso y 1 si es verdadero; de modo que tomar la 'SUMA 'sobre cada grupo proporciona un recuento de aquellos registros donde la condición es verdadera. – eggyal
También podría ser más expresivo y usar 'COUNT (CASE WHEN value = 0 THEN 1 END) AS n0, ..., ...', que funcionará en todos los demás DBMS importantes ya que MySQL es el único que hace implícito conversiones booleanas. Ver mi [pregunta aquí] (http://stackoverflow.com/questions/11340540/conditional-counting-performance-differences-in-using-sum-vs-count) para más información. –