Ver Mensaje Individual
  #9 (permalink)  
Antiguo 30/08/2012, 17:03
Avatar de lizeth_puch
lizeth_puch
 
Fecha de Ingreso: abril-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Sonrisa Respuesta: Grupos de edad

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola rick_korn:

Me hubiera gustado que nos pusieras algo del código que intentaste hacer, para poder ayudarte a finar la sentencia. Tampoco nos das mucha información acerca de cómo está formada tu tabla, qué campos utilizas para hacer las comparaciones ni tampoco nos dices cómo quieres presentar las salida, Con esto resulta muy difícil tratar ayudarte, pero trataré de adivinar qué es lo que necesitas.

Checa este script:

Código MySQL:
Ver original
  1. mysql> create table TablaEdades (id int, descripcion varchar(10), edad int);
  2. Query OK, 0 rows affected (0.19 sec)
  3.  
  4. mysql> insert into TablaEdades values
  5.     -> (1, 'uno', 10), (2, 'dos', 15),(3, 'tres', 21),
  6.     -> (4, 'cuatro', 26), (5, 'cinco', 22), (6, 'seis', 31),
  7.     -> (7, 'siete', 17), (8, 'ocho', 28), (9, 'nueve', 28), (10, 'diez', 39);
  8. Query OK, 10 rows affected (0.05 sec)
  9. Records: 10  Duplicates: 0  Warnings: 0
  10.  
  11. mysql> select * from TablaEdades;
  12. +------+-------------+------+
  13. | id   | descripcion | edad |
  14. +------+-------------+------+
  15. |    1 | uno         |   10 |
  16. |    2 | dos         |   15 |
  17. |    3 | tres        |   21 |
  18. |    4 | cuatro      |   26 |
  19. |    5 | cinco       |   22 |
  20. |    6 | seis        |   31 |
  21. |    7 | siete       |   17 |
  22. |    8 | ocho        |   28 |
  23. |    9 | nueve       |   28 |
  24. |   10 | diez        |   39 |
  25. +------+-------------+------+
  26. 10 rows in set (0.02 sec)
  27.  
  28. mysql> #Para presentar la información en forma de columnas
  29. mysql> select
  30.     -> sum(if(edad between 10 and 19, 1, 0)) 10_19,
  31.     -> sum(if(edad between 20 and 29, 1, 0)) 20_29,
  32.     -> sum(if(edad between 30 and 39, 1, 0)) 39_39,
  33.     -> count(*) total
  34.     -> from TablaEdades;
  35. +-------+-------+-------+-------+
  36. | 10_19 | 20_29 | 39_39 | total |
  37. +-------+-------+-------+-------+
  38. |     3 |     5 |     2 |    10 |
  39. +-------+-------+-------+-------+
  40. 1 row in set (0.00 sec)
  41.  
  42. mysql> #Para presentar la información en forma de renglones
  43. mysql> select rango, count(*) from
  44.     -> (
  45.     -> select
  46.     -> case when edad between 0 and 9 then "20_9"
  47.     -> when edad between 10 and 19 then "10_19"
  48.     -> when edad between 20 and 29 then "20_29"
  49.     -> when edad between 30 and 39 then "30_39"
  50.     -> when edad > 39 then "mas_9" end rango
  51.     -> from TablaEdades
  52.     -> ) T
  53.     -> group by rango
  54.     -> union
  55.     -> select "total", count(*) from TablaEdades;
  56. +-------+----------+
  57. | rango | count(*) |
  58. +-------+----------+
  59. | 10_19 |        3 |
  60. | 20_29 |        5 |
  61. | 30_39 |        2 |
  62. | total |       10 |
  63. +-------+----------+
  64. 4 rows in set (0.00 sec)

Si esto no te sirve entonces atiende a lo que te comento al principio y danos un poco más de información, y en lo subsecuente, cuando publiques alguna otra pregunta recuerda también este punto. Entre más información nos puedas dar más fácil será tratar de ayudarte, no importa que te tardes algún tiempo en redactar tu mensaje. es preferible a poner cuatro lineas de texto y esperar que los demás adivinen el resto. Ojo con eso.

Saludos
Leo.
Me sirvio de mucho leonardo_josue,
a su aportacion la modifique segun la necesitaba, le añadi que me lo separe en hombres y muejeres y me quedo asi:
Código MySQL:
Ver original
  1. SELECT        RANGO_DE_EDADES, SUM(Hombres) AS HOMBRES, SUM(Mujeres) AS MUJERES, COUNT(*) AS TOTAL
  2. FROM            (SELECT        CASE WHEN edad < 20 THEN 'MENOS DE 20 AÑOS' WHEN edad BETWEEN 20 AND 25 THEN 'DE 20 A 25 AÑOS' WHEN edad BETWEEN 26 AND
  3.                                                     35 THEN 'DE 26 A 35 AÑOS' WHEN edad BETWEEN 36 AND 44 THEN 'DE 36 A 44 AÑOS' WHEN edad BETWEEN 45 AND
  4.                                                     54 THEN 'DE 45 A 54 AÑOS' WHEN edad >= 55 THEN '55 O MAS AÑOS' END AS RANGO_DE_EDADES, (CASE WHEN sexo = 'M' THEN 1 ELSE 0 END)
  5.                                                     AS Hombres, (CASE WHEN sexo = 'F' THEN 1 ELSE 0 END) AS Mujeres
  6.                           FROM            Calidad) AS T
  7. GROUP BY RANGO_DE_EDADES, Hombres, Mujeres
  8. SELECT        'Total' AS Expr1, COUNT(*) AS numhom, COUNT(*) AS Expr3, COUNT(*) AS Expr4
  9. FROM            Calidad AS Calidad_1,
mi problema esq la fila que le añadi con el UNION ALL no me cuenta el resultado de las columnas como soluciono eso :(

me muestra este resultado
Código MySQL:
Ver original
  1. Rango_de_edades| Hombres| Mujueres |Total
  2. DE 20 A 25 AÑOS   | 0         |2            |2
  3. DE 26 A 35 AÑOS   | 2         |0            |2
  4. DE 36 A 44 AÑOS   | 1         |0            |1
  5. DE 45 A 54 AÑOS   |1          |0           |1
  6. Total             | 6         |6          |6
el total de la fila de abajo es la q no me esta sumando cuanto hombres y mujeres tengo solo me pone el resultado de cuantos son el total, los resultados de las filas si estan bien :D