Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/11/2013, 15:54
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Dos count para una misma lista

Hola joselegolas:

Este tipo de consultas es uno de los ejemplos típicos que se hacen cuando comienzas a aprender SQL... en realidad hay muchas formas de obtenerlo y en la red hay muchísimos ejemplos... en este mismo foro hemos tratado infinidad de veces este tipo de consultas, por lo que te sugiero que para la próxima te tomes un poco más de tiempo para preguntarle a SAN GOOGLE, el es muy sabio y generalmente tiene la respuesta a lo que sea que preguntes jejejejejeje...

La manera más simple es con sumas condicionales, que son especie de contadores en programación... supongo que habrás visto muchas veces algo como esto:

Código:
Total = Total + 1
Al colocar esto dentro de un ciclo, lo que haces es contar el número de veces que se ejecuta el ciclo... En este caso, utilizas el mismo principio para 'contar' cada uno de los estados... cada que encuentres un estado con OK para un usuario en particular Sumas un 1 al resultado total... esto debes hacerlo para TODOS LOS ESTADOS QUE EXISTEN EN TU TABLA... sería algo más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+-----------+-----------------+
  3. | usuario  | estado    | tarea           |
  4. +----------+-----------+-----------------+
  5. | José     | OK        | Escribir libro  |
  6. | María    | OK        | Cocinar arroz   |
  7. | María    | Pendiente | Pintar cuadro   |
  8. | Leonardo | Pendiente | cantar canción  |
  9. +----------+-----------+-----------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT
  13.     ->    usuario,
  14.     ->    SUM(IF(estado = 'OK', 1, 0)) total_ok,
  15.     ->    SUM(IF(estado = 'Pendiente', 1, 0)) total_pendiente
  16.     -> FROM tabla
  17.     -> GROUP BY usuario;
  18. +----------+----------+-----------------+
  19. | usuario  | total_ok | total_pendiente |
  20. +----------+----------+-----------------+
  21. | José     |        1 |               0 |
  22. | Leonardo |        0 |               1 |
  23. | María    |        1 |               1 |
  24. +----------+----------+-----------------+
  25. 3 rows in set (0.00 sec)

En tu post no nos dices de dónde obtienes los nombres de los usuarios... puedo suponer que los tienes en una tabla aparte... lo único que tendrías que hacer es un JOIN con esa tabla para obtener el resultado tal como lo quieres.

Saludos
Leo.