RE: Ayuda urgente y supongo facil ( mañana entrego practicas)

From: Eduardo Gutierrez <edufissure(at)msn(dot)com>
To: <mburdman(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Ayuda urgente y supongo facil ( mañana entrego practicas)
Date: 2008-11-18 22:20:27
Message-ID: BLU144-W155EAE7453E5FE10B6B7E2DC120@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Tengo una sencilla base de datos alumno(idalumno,nombre, edad, ciutat), asignatura ( idassignatura, nombre, numalumnos) y notas ( idassignatura, idalumno, nota).Me piden:12) Obtenir el porcentaje de alumnos que tienen nota de cada asignatura. Es decir, el identificador de alumno, el nombre de la asignatura y la proporción entre el numero total de alumnos que tienen nota en la assignatura y los que estan matriculados en cada una de ellas. Esta ultima columna llamarla 'PERCENTUAL'. Ordenar el resultado por el nombre de la asignatura.Idea:select idalumne, nomassignatura,proporcion alumnos con nota en la asignatura/numero de alumnos as "PERCENTUAL" from notes where edat IS NOT NULL GROUP BY idassignaturaorder by 1;Casi bien me falta idalumneselect idassignatura,nom,count (nota), ( count(nota)::float/numalumnes::float)*100 as "PERCENTUAL"from assignatura inner join notes using(idassignatura)GROUP BY nom,idassignatura,numalumnesorder by 1;Tengo que contar los alumnos que tienen nota ( en la tabla notes ) y dividirlo por el numero de alumnos matriculados o sea assignatura.numalumnes. idassignatura | nom | count | PERCENTUAL---------------+----------+-------+------------------ 1 | IBD | 6 | 10 2 | EDALG | 6 | 12 3 | ESOFT | 2 | 6.66666666666667 4 | EDI | 1 | 1.33333333333333 5 | LABOSOFT | 3 | 10 6 | TC | 2 | 5La asignatura 1 con nombre IBD tiene 6 notas. Como tiene 60 alumnos ( asignatura.numalumos su porcentual es 6/60=10% Pero me pide tambien idalumne con lo cual si lo pongo en el group by se me desordena todo. Ya que solo me contara un alumno por asignatura. Asi:idalumne | idassignatura | nom | count | PERCENTUAL----------+---------------+----------+-------+------------------ 1 | 2 | EDALG | 1 | 2 1 | 4 | EDI | 1 | 1.33333333333333 1 | 1 | IBD | 1 | 1.66666666666667 1 | 7 | prueba | 1 | 1.33333333333333 2 | 2 | EDALG | 1 | 2 2 | 1 | IBD | 1 | 1.66666666666667 3 | 2 | EDALG | 1 | 2 3 | 1 | IBD | 1 | 1.66666666666667 3 | 6 | TC | 1 | 2.5 4 | 2 | EDALG | 1 | 2 4 | 3 | ESOFT | 1 | 3.33333333333333 4 | 1 | IBD | 1 | 1.66666666666667 4 | 5 | LABOSOFT | 1 | 3.33333333333333 4 | 6 | TC | 1 | 2.5 5 | 2 | EDALG | 1 | 2 5 | 3 | ESOFT | 1 | 3.33333333333333 5 | 1 | IBD | 1 | 1.66666666666667 5 | 5 | LABOSOFT | 1 | 3.33333333333333 5 | 7 | prueba | 1 | 1.33333333333333 6 | 2 | EDALG | 1 | 2 6 | 1 | IBD | 1 | 1.66666666666667 6 | 5 | LABOSOFT | 1 | 3.33333333333333Solo tengo un alumno por asignatura.El problema lo tengo al mezclar funciones de agregacion con group by. El profesor me ha sugerido que utilice subselects para no liarme tanto pero no lo veo.Gracias por adelantadoAqui esta para hacer pruebas y esoDROP TABLE Notes;DROP TABLE Alumne;DROP TABLE Assignatura;CREATE TABLE Alumne ( Idalumne serial primary key, Nom varchar(20), Edat int, Ciutat varchar(15) );CREATE TABLE Assignatura ( Idassignatura serial, Nom varchar(20), NumAlumnes int, PRIMARY KEY (Idassignatura) );CREATE TABLE Notes ( Idalumne int, Idassignatura int references Assignatura(Idassignatura), Nota int, PRIMARY KEY (Idalumne,Idassignatura), FOREIGN KEY (Idalumne) REFERENCES Alumne(Idalumne) );INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Joan',19,'Lleida');INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Abel',18,'Manresa');INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Teresa',20,'Barcelona');INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Marta',18,'Lleida');INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Juli',22,'Manresa');INSERT INTO Alumne (Nom,Edat,Ciutat) VALUES ('Montse',17,'Barcelona');INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('IBD',60);INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('EDALG',50);INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('ESOFT',30);INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('EDI',75);INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('LABOSOFT',30);INSERT INTO Assignatura (Nom,NumAlumnes) VALUES ('TC',40);INSERT INTO Notes VALUES (1,1,10);INSERT INTO Notes VALUES (1,2,8);INSERT INTO Notes VALUES (1,4,10);INSERT INTO Notes VALUES (2,1,8);INSERT INTO Notes VALUES (2,2,3);INSERT INTO Notes VALUES (3,1,4);INSERT INTO Notes VALUES (3,2,3);INSERT INTO Notes VALUES (3,6,4);INSERT INTO Notes VALUES (4,1,10);INSERT INTO Notes VALUES (4,2,8);INSERT INTO Notes VALUES (4,3,3);INSERT INTO Notes VALUES (4,5,10);INSERT INTO Notes VALUES (4,6,9);INSERT INTO Notes VALUES (5,1,10);INSERT INTO Notes VALUES (5,2,9);INSERT INTO Notes VALUES (5,3,6);INSERT INTO Notes VALUES (5,5,7);INSERT INTO Notes VALUES (6,1,8);INSERT INTO Notes VALUES (6,2,8);INSERT INTO Notes VALUES (6,5,3);> Date: Tue, 18 Nov 2008 17:31:48 -0300> From: mburdman(at)gmail(dot)com> To: edufissure(at)msn(dot)com> Subject: Re: [pgsql-es-ayuda] Ayuda urgente y supongo facil ( mañana entrego practicas)> CC: pgsql-es-ayuda(at)postgresql(dot)org> > Que te piden? creo que se te perdio un pedazo de mail en el camino?> > On Tue, Nov 18, 2008 at 4:52 PM, Eduardo Gutierrez <edufissure(at)msn(dot)com> wrote:> > Tengo una sencilla base de datos formada por alumnos ( idalumno, nombre,> > edad, ciudad), notas (idalumno, idassignatura, nota) y asignatura> > (idasignatura, nombre, numeroalumnos).> > Me piden:> >> >> > ________________________________> > ¡Pasa del Pendrive! Skydrive almacena hasta 5 GB online gratis
_________________________________________________________________
Ahora con Internet Explorer 7, llévate gratis un guiño personalizado
http://www.vivelive.com/ieak7/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2008-11-18 23:19:11 [OT] Indices de redimiento
Previous Message Ahmed Rodriguez Pando 2008-11-18 21:54:19 particionamiento vertical