recorrer llenar into example arreglos array_agg array sql arrays postgresql

llenar - recorrer array postgresql



Matriz agregada Postgresql (3)

Hola, tengo dos mesas

Student -------- Id Name 1 John 2 David 3 Will Grade --------- Student_id Mark 1 A 2 B 2 B+ 3 C 3 A

¿Es posible seleccionar Postgresql nativo para obtener resultados como este?

Name Array of marks ----------------------- ''John'', {''A''} ''David'', {''B'',''B+''} ''Will'', {''C'',''A''}

Pero no así

Name Mark ---------------- ''John'', ''A'' ''David'', ''B'' ''David'', ''B+'' ''Will'', ''C'' ''Will'', ''A''


Lo que entiendo es que puedes hacer algo como esto:

SELECT p.p_name, STRING_AGG(Grade.Mark, '','' ORDER BY Grade.Mark) As marks FROM Student LEFT JOIN Grade ON Grade.Student_id = Student.Id GROUP BY Student.Name;

EDITAR

No estoy seguro. Pero tal vez algo como esto, entonces:

SELECT p.p_name,      array_to_string(ARRAY_AGG(Grade.Mark),'';'') As marks FROM Student LEFT JOIN Grade ON Grade.Student_id = Student.Id GROUP BY Student.Name;

Referencia here



Use array_agg: http://www.sqlfiddle.com/#!1/5099e/1

SELECT s.name, array_agg(g.Mark) as marks FROM student s LEFT JOIN Grade g ON g.Student_id = s.Id GROUP BY s.Id

Por cierto, si está usando Postgres 9.1, no necesita repetir las columnas en SELECT para GROUP BY, por ejemplo, no necesita repetir el nombre del estudiante en GROUP BY. Puede simplemente agrupar BY en la clave principal. Si elimina la clave primaria del alumno, debe repetir el nombre del alumno en GROUP BY.

CREATE TABLE grade (Student_id int, Mark varchar(2)); INSERT INTO grade (Student_id, Mark) VALUES (1, ''A''), (2, ''B''), (2, ''B+''), (3, ''C''), (3, ''A''); CREATE TABLE student (Id int primary key, Name varchar(5)); INSERT INTO student (Id, Name) VALUES (1, ''John''), (2, ''David''), (3, ''Will'');