Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/05/2012, 13:26
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: GROUP BY & BETWEEN en una sola consulta

Hola nelson12345:

Complementando el comentario del compañero gnzsoloyo.

Si lo que quieres es contar cuantos registros de tu consulta 1 tienen una fecha contenida entre los rangos puedes hacerlo con una suma condicional, poniendo la condición BETWEEN dentro de la condición de la suma... veamos este ejemplo para ver si es más o menos lo que quieres.

Supongamos que le preguntamos a 10 personas si les gusta cierto artículo para determinar a qué grupo de personas dirigir la publicidad. Con sus respuestas obtenemos una tabla como esta:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------+------+-----------+
  3. | id   | sexo | edad | respuesta |
  4. +------+------+------+-----------+
  5. |    1 | H    |   18 | si        |
  6. |    2 | M    |   21 | no        |
  7. |    3 | H    |   34 | si        |
  8. |    4 | H    |   42 | no        |
  9. |    5 | M    |   19 | no        |
  10. |    6 | H    |   36 | no        |
  11. |    7 | H    |   45 | si        |
  12. |    8 | M    |   21 | si        |
  13. |    9 | M    |   49 | si        |
  14. |   10 | H    |   50 | no        |
  15. +------+------+------+-----------+
  16. 10 rows in set (0.02 sec)

Supongamos que queremos agrupar por sexo y por respuesta los resultados: podríamos entonces hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT sexo, respuesta, COUNT(sexo) total
  2.     -> FROM tabla GROUP BY sexo, respuesta;
  3. +------+-----------+-------+
  4. | sexo | respuesta | total |
  5. +------+-----------+-------+
  6. | H    | no        |     3 |
  7. | H    | si        |     3 |
  8. | M    | no        |     2 |
  9. | M    | si        |     2 |
  10. +------+-----------+-------+
  11. 4 rows in set (0.00 sec)

Si observamos el resultado, obtenemos los mismos resultados para ambas categorías, por lo tanto la información no nos muestra algún patrón que podamos decidir, consideremos ahora la variable de edad. Si contamos las respuestas por RANGOS DE EDAD obtenemos lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT sexo, respuesta, COUNT(*) total,
  2.     -> SUM(IF (edad BETWEEN 18 AND 30, 1, 0)) edad_18_a_30,
  3.     -> SUM(IF (edad BETWEEN 31 AND 50, 1, 0)) edad_31_a_50
  4.     -> FROM tabla GROUP BY sexo, respuesta;
  5. +------+-----------+-------+--------------+--------------+
  6. | sexo | respuesta | total | edad_18_a_30 | edad_31_a_50 |
  7. +------+-----------+-------+--------------+--------------+
  8. | H    | no        |     3 |            0 |            3 |
  9. | H    | si        |     3 |            1 |            2 |
  10. | M    | no        |     2 |            2 |            0 |
  11. | M    | si        |     2 |            1 |            1 |
  12. +------+-----------+-------+--------------+--------------+
  13. 4 rows in set (0.00 sec)

aquí observamos que por un lado a los hombres mayores de 30 años no les gusta el producto, pero en las mujeres sería lo contrario, es decir que a las mujeres menores de 30 es a las que no les gusta...

observa que la suma se hace de manera condicional poniendo dentro de la SUM la condición between:

Código:
SUM(IF (edad BETWEEN 31 AND 50, 1, 0)) edad_31_a_50
Dale un vistazo para ver si te sirve.

Saludos
Leo.