PostgreSQL에서 여러 행의 값을 특정 구분자를 넣어 한 줄로 출력하는 방법은 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 여러 열 값을 하나의 문자열로 결합하거나, 특정 그룹에 대한 데이터를 한 줄로 표현할 때 사용됩니다. 이를 가능하게 하는 대표적인 함수가 STRING_AGG() 함수입니다.
이번 글에서는 PostgreSQL에서 행 데이터를 구분자를 이용해 한 줄로 표현하는 방법에 대해 알아보겠습니다.
1. STRING_AGG() 함수란?
STRING_AGG() 함수는 PostgreSQL에서 문자열 집합을 구분자로 연결하여 하나의 문자열로 결합해주는 집계 함수입니다. 이 함수는 주로 여러 행을 하나의 문자열로 변환할 때 사용됩니다. 특정 컬럼의 값을 원하는 구분자(쉼표, 공백 등)를 넣어서 한 줄로 표현할 수 있습니다.
2. 기본 사용법
STRING_AGG()의 기본 구문은 다음과 같습니다:
STRING_AGG(column_name, 'delimiter')
- column_name: 결합할 컬럼 값
- 'delimiter': 각 값을 구분할 구분자 (쉼표, 공백 등)
이 함수는 지정한 컬럼의 값을 구분자로 연결하여 하나의 문자열로 반환합니다.
3. 예제: 단순한 사용
예를 들어, 다음과 같은 students 테이블이 있다고 가정해 봅시다.
students 테이블
id | name | major |
1 | Alice | Mathematics |
2 | Bob | Physics |
3 | Charlie | Chemistry |
4 | David | Biology |
각 학생의 전공을 쉼표(,)로 구분해서 한 줄로 표현하고 싶다면, 다음과 같은 쿼리를 사용할 수 있습니다.
예제 쿼리
SELECT STRING_AGG(major, ', ') AS majors
FROM students;
결과:
majors
-------------------------------
Mathematics, Physics, Chemistry, Biology
설명
- STRING_AGG(major, ', '): major 컬럼의 값을 쉼표와 공백(, )으로 구분하여 하나의 문자열로 결합합니다.
- 결과는 한 줄로 결합된 전공 리스트입니다.
4. 예제: 그룹화된 데이터에 적용
특정 그룹에 속한 데이터를 한 줄로 결합할 때도 STRING_AGG()를 사용할 수 있습니다. 예를 들어, 각 전공별로 학생들의 이름을 한 줄로 결합하려면 GROUP BY와 함께 사용할 수 있습니다.
예제 쿼리
SELECT major, STRING_AGG(name, ', ') AS students_list
FROM students
GROUP BY major;
결과:
major | students_list |
Biology | David |
Chemistry | Charlie |
Mathematics | Alice |
Physics | Bob |
설명
- GROUP BY major: 각 전공별로 학생을 그룹화합니다.
- STRING_AGG(name, ', '): 각 전공에 속한 학생들의 이름을 쉼표와 공백으로 결합해 한 줄로 출력합니다.
이렇게 하면, 동일한 전공을 가진 학생들의 이름이 한 줄로 표현됩니다.
5. 예제: 중복 제거와 정렬
STRING_AGG()는 결합할 때 중복된 값도 함께 결합하지만, DISTINCT 키워드를 사용하면 중복을 제거할 수 있습니다. 또한, 결합할 값의 순서를 지정하고 싶다면 ORDER BY를 사용할 수 있습니다.
예제 쿼리: 중복 제거 및 정렬
SELECT STRING_AGG(DISTINCT name, ', ' ORDER BY name) AS sorted_names
FROM students;
결과:
sorted_names
------------------------------
Alice, Bob, Charlie, David
설명
- DISTINCT: 중복된 이름이 있을 경우 중복을 제거하고 결합합니다.
- ORDER BY name: 결합하기 전에 이름을 알파벳순으로 정렬합니다.
이와 같이, STRING_AGG()는 결합할 값을 정렬한 후 구분자를 사용하여 출력할 수 있습니다.
6. 예제: 여러 컬럼 결합하기
여러 컬럼을 구분자로 결합할 수도 있습니다. 예를 들어, 학생의 이름과 전공을 결합해 한 줄로 표현하려면 다음과 같은 쿼리를 사용할 수 있습니다.
예제 쿼리
SELECT STRING_AGG(name || ' (' || major || ')', ', ') AS student_info
FROM students;
결과:
student_info
----------------------------------------
Alice (Mathematics), Bob (Physics), Charlie (Chemistry), David (Biology)
설명
- name || ' (' || major || ')': name과 major 컬럼을 괄호 안에 넣어서 결합합니다.
- STRING_AGG(): 결합한 문자열을 쉼표와 공백으로 구분하여 한 줄로 출력합니다.
7. 주의 사항
1. NULL 값 처리: STRING_AGG()는 기본적으로 NULL 값을 무시하고 결합합니다. 만약 NULL 값을 포함해 처리하고 싶다면 COALESCE()와 같은 함수를 사용할 수 있습니다.
SELECT STRING_AGG(COALESCE(major, 'Unknown'), ', ') AS majors
FROM students;
2. 데이터 양이 많을 경우: 결합할 데이터가 매우 많을 경우 성능에 영향을 미칠 수 있습니다. 이 경우, 결합할 데이터 양을 제한하거나 LIMIT 등을 사용하여 제어할 수 있습니다.
PostgreSQL의 STRING_AGG() 함수는 여러 행의 값을 구분자로 결합해 하나의 문자열로 출력할 수 있는 강력한 집계 함수입니다. 이를 통해 원하는 형식으로 데이터를 쉽게 가공할 수 있으며, 그룹별로 데이터를 한 줄로 표현할 수 있는 유용한 기능을 제공합니다.
'Develop' 카테고리의 다른 글
JavaScript와 jQuery를 사용해서 disabled 활성화, 비활성화 방법 (5) | 2024.10.22 |
---|---|
[JavaScript] Cookie 쿠키를 저장하고 불러오는 방법 (7) | 2024.10.22 |
[JavaScript] 소수점 올림, 버림, 반올림 사용방법 (6) | 2024.10.21 |
[JavaScript] URL 인코딩과 디코딩 쉽고 간단하게 적용 (6) | 2024.10.17 |
[jQuery] 드래그 금지, 우클릭 금지, 전체 선택 금지 - 간단 방법 (7) | 2024.10.16 |