Re: Misma tabla ayuda!

From: Claudio Bustos Bravo <cbustosb(at)articlynx(dot)cl>
To: Eugenio Segura <eugenio(dot)segura(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Misma tabla ayuda!
Date: 2007-01-25 20:28:52
Message-ID: 1169756932.29673.28.camel@clay
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El mié, 24-01-2007 a las 13:52 -0600, Eugenio Segura escribió:
> Tengo una tabla de alumnos y la nota digamos
> Nombre Nota Periodo Materia
> Eugenio 60 0 Matematica
> Eugenio 70 1 Matematica
> Eugenio 80 2 Matematica
> Eugenio 61 0 Español
> Eugenio 71 1 Español
> Eugenio 81 2 Español
>
> Obiamente otros datos mas...
>
> pero lo q necesito es obtener esto
>
> Nombre Nota Nota Nota Materia
> Eugenio 60 70 80 Matematica
> Eugenio 61 71 81 Español
>
> intente hacer 4 joins en la misma tabla pero dura demaciado y se traba
> el programa
>
> alguien sabe una mejor forma de hacerlo?
>

joins?, en una sola query?

Si la cantidad de columnas (notas) a proyectar (por periodo/materia) no
es demasiada (15, 20?), podrias hacer subquerys en la proyeccion en dos
pasos, de la forma:

a) armar las proyecciones

para cada cantidad de notas, hacer:
$proyeccion = $proyeccion ||
",(select nota
from notas
where
rut_alumno = a.rut --este es literal
id_materia = m.id
id_periodo = p.id
id = <VALOR> --id de la nota de esa materia en ese periodo
) as nota_<VALOR> " --correlativo (del ciclo)
loop

b) la query (unica) completa:

$query = "select
a.nombre as nombre_alumno
$proyeccion,
m.nombre as nombre_materia,
p.nombre as nombre_periodo
from
materias as m
inner join periodos as p on ....
inner join cursa as c on ....
inner join alumno as a on ...
... defines los alumnos, materias y periodos ..
"

No es muy ortodoxo, pero ha resultado... en particular ha tenido mejor
rendimiento que el contrib/crosstab

eso!...

Claudio

> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
>
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>
--

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-01-25 20:45:59 Re: Última tupla insertada...
Previous Message Daniel Carrero 2007-01-25 19:49:15 Re: Sitio en espaniol