Witam mam dwa stoliki
Student
--------
Id Name
1 John
2 David
3 Will
Grade
---------
Student_id Mark
1 A
2 B
2 B+
3 C
3 A
Czy możliwe jest wybranie natywnego Postgresql, aby uzyskać takie wyniki:
Name Array of marks
-----------------------
'John', {'A'}
'David', {'B','B+'}
'Will', {'C','A'}
Ale nie tak
Name Mark
----------------
'John', 'A'
'David', 'B'
'David', 'B+'
'Will', 'C'
'Will', 'A'
sql
arrays
postgresql
łatwy
źródło
źródło
Rozumiem, że możesz zrobić coś takiego:
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;
EDYTOWAĆ
Nie jestem pewien. Ale może wtedy coś takiego:
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;
Odniesienie tutaj
źródło
Możesz użyć następujących:
SELECT Student.Name as Name, (SELECT array(SELECT Mark FROM Grade WHERE Grade.Student_id = Student.Id)) AS ArrayOfMarks FROM Student
Jak opisano tutaj: http://www.mkyong.com/database/convert-subquery-result-to-array/
źródło
@Michael Buen ma rację. Mam to, czego potrzebowałem, używając array_agg.
Oto przykład podstawowego zapytania na wypadek, gdyby komuś pomogło:
SELECT directory, ARRAY_AGG(file_name) FROM table WHERE type = 'ZIP' GROUP BY directory;
Wynik był taki:
parent_directory | array_agg | ------------------------+----------------------------------------+ /home/postgresql/files | {zip_1.zip,zip_2.zip,zip_3.zip} | /home/postgresql/files2 | {file1.zip,file2.zip} |
Ten post również bardzo mi pomógł: „Grupuj według” w SQL i Python Pandas . Zasadniczo mówi się, że wygodniej jest używać tylko języka SQL, jeśli to możliwe, ale że Python Pandy mogą być przydatne do uzyskania dodatkowych funkcji w procesie filtrowania.
Mam nadzieję, że to pomoże
źródło