From: | "Siciliano, Pablo E(dot)" <psiciliano(at)puentenet(dot)com> |
---|---|
To: | Karla Paola Diazgranados Sánchez <karlapds(at)gmail(dot)com> |
Cc: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Consultas bivariadas |
Date: | 2005-10-03 15:20:56 |
Message-ID: | 004a01c5c82e$0d40ab80$2300a8c0@PuenteHnos.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Que tal algo como esto (Siguiendo con la idéa del group by)
1) Te creas una función que dada una fecha de nacimiento te de el grupo de edad. Algo con el prototipo:
dar_grupo_edad(fecha) [menor_5 | 5_a_15_anios | 15_a_45_anios | mayor_45 ]
No es muy dificil, pero no da para hacerlo en un mail ;)
Lo mismo podés hacer con cualquiera de tus variables de tu consulta bivariada.
2) SELECT dar_grupo_fecha(fecha_nacimiento) AS grupo_edad,sexo,count(1) AS cant FROM tutabla GROUP BY grupo_edad,sexo ORDER BY grupo_edad
Eso te va a dar una lista de un estilo parecido a:
menos_5 M 30
menos_5 F 40
5_a_15_anios M 10
5_a_15_anios F 50
15_a_45_anios M 15
15_a_45_anios F 5
mayor_45 M 30
mayor_45 F 43
3) Si necesitás transponerlo, podés hacer algo un poco mas pesado como:
SELECT t1.grupo_edad,t1.cant AS cant_m,t2.cant AS cant_f FROM (SELECT dar_grupo_fecha(fecha_nacimiento) AS grupo_edad,sexo,count(1) AS cant FROM tutabla WHERE sexo='M' GROUP BY grupo_edad,sexo) AS t1, (SELECT dar_grupo_fecha(fecha_nacimiento) AS grupo_edad,sexo,count(1) AS cant FROM tutabla WHERE sexo='F' GROUP BY grupo_edad,sexo) AS t2 WHERE t1.grupo_edad=t2.grupo_edad ORDER BY t1grupo_edad,t1.sexo
Eso debería darte algo como (Siguiendo el ejemplo de arriba):
grupo_edad cant_m cant_f
menos_5 30 40
5_a_15_anios 10 50
15_a_45_anios 15 5
mayor_45 30 43
De mas esta decir, que si podés armarte un group by para tu campo mas sencillo que hacerte la dichosa función, ese paso esta de mas.
Saludos!!
Pablo E. Siciliano.
----- Original Message -----
From: Karla Paola Diazgranados Sánchez
To: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Thursday, September 29, 2005 5:16 PM
Subject: Re: [pgsql-es-ayuda] Consultas bivariadas
Horacio y Alvaro, muchas gracias.
Siento no haber sido muy clara con mi consulta. En realidad la consulta podría ser más fácil de lo que parece... así como cuando se utiliza la función GROUP BY para obtener los valores agrupados por un campo específico... en este caso necesitaría tenerlo por dos al tiempo, pero enfrentados, así:
Femenino Masculino
______________________________________________
Menor de 5 10 9
5 a 15 años 30 45
15 a 45 años 83 76
Mayor de 45 años 21 21
En access se utiliza una función que se denomina TRANSFORM ... SELECT... PIVOT en donde el select intermedio agrupa los datos de sexo y el transform.. pivot, externos, los relacionan con los valores agrupados de edad... pero en postgres esta función no es válida... saben ustedes cuál podría utilizar?
Gracias,
Karla DiazGranados
------------------------------------------------------------------------------
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.11.8/114 - Release Date: 2005/09/28
From | Date | Subject | |
---|---|---|---|
Next Message | Karla Paola Diazgranados Sánchez | 2005-10-03 15:22:52 | Re: Consultas bivariadas |
Previous Message | Conrado Blasetti | 2005-10-03 14:53:19 | RE: Funcion local |