From: | "Mario Burdman" <mburdman(at)gmail(dot)com> |
---|---|
To: | "Eduardo Gutierrez" <edufissure(at)msn(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 23:39:16 |
Message-ID: | 14bba8590811181539h3cc61bbt3433c36edea8ced7@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
No estoy seguro que sea lo que te piden porque no está claro cual es
el resultado esperado, la única forma de mostrar los ids de un grupo
seria separador por algo.
Aca va un ejemplo que te puede ayudar:
SELECT provincia.descripcion,
array_to_string(ARRAY(SELECT localidad.descripcion
FROM localidad
WHERE localidad.provincia_id = provincia.id), ',') AS localidades
FROM provincia
Muestra las ciudades de una provincia separadas por coma.
--
Saludos
On Tue, Nov 18, 2008 at 7:20 PM, Eduardo Gutierrez <edufissure(at)msn(dot)com> wrote:
> 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 idassignatura
> order by 1;
>
>
> Casi bien me falta idalumne
>
> select idassignatura,nom,count (nota), (
> count(nota)::float/numalumnes::float)*100 as "PERCENTUAL"
> from assignatura inner join notes using(idassignatura)
> GROUP BY nom,idassignatura,numalumnes
> order 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 | 5
>
> La 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.33333333333333
>
> Solo 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 adelantado
>
> Aqui esta para hacer pruebas y eso
> DROP 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);
From | Date | Subject | |
---|---|---|---|
Next Message | Verny Mata | 2008-11-18 23:40:21 | Re: Postgres y PHP |
Previous Message | Espartano | 2008-11-18 23:37:40 | Re: Postgres y PHP |