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

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);

In response to

Responses

Browse pgsql-es-ayuda by date

  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