Re: Consultas bivariadas

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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