Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/07/2012, 12:37
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: agrupar por rango de edades

Hola StrikeFreedom:

Lo puedes hacer con un IF o un CASE-WHEN anidado... en lugar de solamente calcular la edad, clasificas también cada registro, sería más o menos así (No pongo la parte del cálculo de la edad)

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+------+
  3. | id   | nombre | edad |
  4. +------+--------+------+
  5. |    1 | luis   |   12 |
  6. |    2 | jose   |   26 |
  7. |    3 | hugo   |   29 |
  8. |    4 | carlos |   10 |
  9. |    5 | leo    |   31 |
  10. +------+--------+------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT
  14.     ->   CASE WHEN (edad BETWEEN 10 AND 19) THEN 'De 10 a 19' ELSE
  15.     ->     CASE WHEN (edad BETWEEN 20 AND 29) THEN 'De 20 a 29' ELSE
  16.     ->       CASE WHEN (edad >= 20) THEN 'De 30 o más'
  17.     ->       END
  18.     ->     END
  19.     ->   END rango,
  20.     ->   COUNT(*) total
  21.     -> FROM tabla
  22.     -> GROUP BY rango;
  23. +------------+-------+
  24. | rango      | total |
  25. +------------+-------+
  26. | De 10 a 19 |     2 |
  27. | De 20 a 29 |     2 |
  28. | De 30 o m  |     1 |
  29. +------------+-------+
  30. 3 rows in set, 2 warnings (0.00 sec)

El único cuidado que debes tener es que todos tus rangos sean excluyentes, es decir, que no se empalmen datos. También podrías presentar los datos en un solo registro... esto podrías hacerlo con sumas condicionales:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   SUM(IF (edad BETWEEN 10 AND 19, 1, 0)) De_10_a_19,
  3.     ->   SUM(IF (edad BETWEEN 20 AND 29, 1, 0)) De_20_a_29,
  4.     ->   SUM(IF (edad >= 30, 1, 0)) De_30_o_mas
  5.     -> FROM tabla;
  6. +------------+------------+-------------+
  7. | De_10_a_19 | De_20_a_29 | De_30_o_mas |
  8. +------------+------------+-------------+
  9. |          2 |          2 |           1 |
  10. +------------+------------+-------------+
  11. 1 row in set (0.00 sec)

Saludos
Leo.