Postgresql Aggresql
테이블이 두 개 있습니다.
Student
--------
Id Name
1 John
2 David
3 Will
Grade
---------
Student_id Mark
1 A
2 B
2 B+
3 C
3 A
네이티브 Postgresql SELECT로 다음과 같은 결과를 얻을 수 있습니까?
Name Array of marks
-----------------------
'John', {'A'}
'David', {'B','B+'}
'Will', {'C','A'}
하지만 아래와 같은 것은 아닙니다.
Name Mark
----------------
'John', 'A'
'David', 'B'
'David', 'B+'
'Will', 'C'
'Will', 'A'
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
참고로 Postgres 9.1을 사용하는 경우에는 SELECT to GROUP BY 열을 반복할 필요가 없습니다. 예를 들어 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');
다음과 같은 작업을 수행할 수 있습니다.
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;
편집
잘 모르겠어요.하지만 아마도 이런 것이 있을 것입니다.
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;
여기서 참조
다음을 사용할 수 있습니다.
SELECT Student.Name as Name,
(SELECT array(SELECT Mark FROM Grade WHERE Grade.Student_id = Student.Id))
AS ArrayOfMarks
FROM Student
여기에 설명된 바와 같이, http://www.mkyong.com/database/convert-subquery-result-to-array/
Michael Buen이 맞췄습니다.array_agg를 사용하여 필요한 것을 얻었습니다.
다음은 누군가에게 도움이 될 경우를 대비한 기본 쿼리 예제입니다.
SELECT directory, ARRAY_AGG(file_name)
FROM table
WHERE type = 'ZIP'
GROUP BY directory;
그 결과는 다음과 같았습니다.
| parent_directory | array_agg |
+-------------------------+----------------------------------------+
| /home/postgresql/files | {zip_1.zip,zip_2.zip,zip_3.zip} |
| /home/postgresql/files2 | {file1.zip,file2.zip} |
이 게시물은 SQL 및 Python Pandas의 "Group By"에도 많은 도움이 되었습니다.기본적으로 가능한 경우 PSQL만 사용하는 것이 더 편리하지만, Python Pandas는 필터링 과정에서 추가 기능을 달성하는 데 유용할 수 있다고 말합니다.
언급URL : https://stackoverflow.com/questions/10928210/postgresql-aggregate-array
'source' 카테고리의 다른 글
iOS에서 최신 장치 언어를 가져오시겠습니까? (0) | 2023.05.04 |
---|---|
저장소에서 모든 Git 및 Mercurial 커밋을 검색하여 특정 문자열을 찾는 방법은 무엇입니까? (0) | 2023.05.04 |
Ubuntu에서 pgAdmin을 사용하여 Postgres를 로컬 호스트 서버에 연결하는 방법은 무엇입니까? (0) | 2023.05.04 |
Xcode를 이전 버전으로 다운그레이드하는 방법은 무엇입니까? (0) | 2023.05.04 |
.axd 파일이란 무엇입니까? (0) | 2023.05.04 |