PostgreSQL string_agg 함수
Shihab Sikder
2023년6월20일
-
string_agg()
를 사용하여 PostgreSQL에서 문자열 연결 -
PostgreSQL에서
string_agg()
의 복제본 교체 -
PostgreSQL의
string_agg()
에서 주문
이 기사에서는 string_agg()
함수를 사용하여 PostgreSQL GROUP BY
쿼리에서 문자열 필드의 문자열을 연결하는 방법에 대해 설명합니다.
string_agg()
를 사용하여 PostgreSQL에서 문자열 연결
string_agg()
는 null 문자가 없는 문자열을 결합합니다. 열 이름과 구분 기호(예: 쉼표, 대시, 문자)를 입력으로 사용합니다.
직원 및 제휴사에 대한 다음 표가 있습니다. 각 회사의 모든 직원 이름을 쉼표로 구분하여 나열하라는 요청을 받았습니다.
다음은 우리가 가지고 있는 데이터입니다.
postgres=# SELECT * from employee;
id | companyname | employeename | salary
----+-------------+--------------+---------
1 | Sony | Bob | 1500.55
2 | Sony | Bob | 1500.55
3 | Sony | Jhon | 2000
4 | Sony | Dow | 15000
5 | Sony | Alice | 5602
6 | Google | Jade | 1500.55
7 | Google | Penny | 1500.55
8 | Google | Kat | 1500.55
9 | Google | Merly | 1500.55
10 | Hitachi | Raymond | 1500.55
11 | Hitachi | Skye | 1500.55
12 | Hitachi | Sova | 1500.55
13 | Hitachi | Jenny | 1500.55
string_agg
를 사용하려고 하면 회사 이름
으로 그룹화됩니다. 이제 항목이 두 번 있음을 알 수 있습니다.
PSQL에서 string_agg()
사용
SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;
출력:
companyname | employees
-------------+----------------------------
Sony | Bob, Bob, Jhon, Dow, Alice
Google | Jade, Penny, Kat, Merly
Hitachi | Raymond, Skye, Sova, Jenny
(3 rows)
이제 각 회사의 모든 직원 이름이 출력되는 것을 볼 수 있습니다. 주목하면 Sony
에 Bob
이 두 번 인쇄된 것을 볼 수 있습니다.
PostgreSQL에서 string_agg()
의 복제본 교체
중복을 제거하려면 연결할 열 이름 앞에 string_agg()
함수에 DISTINCT
키워드를 추가할 수 있습니다.
따라서 string_agg()
에서 중복 항목을 제거하는 위 SQL의 수정은 다음과 같습니다.
SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;
출력:
companyname | employees
-------------+----------------------------
Google | Jade, Kat, Merly, Penny
Hitachi | Jenny, Raymond, Skye, Sovav
Sony | Alice, Bob, Dow, Jhon
(3 rows)
PostgreSQL의 string_agg()
에서 주문
string_agg()
함수는 매개변수를 SQL 쿼리로 사용할 수 있습니다. 따라서 예를 들어 단순히 순서를 쓰는 것보다 역순으로 문자열을 연결하려는 경우 출력 문자열의 순서를 변경할 수 있습니다.
따라서 업데이트된 코드는 다음과 같습니다.
SELECT companyname As CompanyName, STRING_AGG(DISTINCT employeename,', ' ORDER BY employeename desc) as Employees
FROM employee
GROUP BY companyname;
출력:
companyname | employees
-------------+----------------------------
Google | Penny, Merly, Kat, Jade
Hitachi | Sova, Skye, Raymond, Jenny
Sony | Jhon, Dow, Bob, Alice
(3 rows)
다음은 string_agg
에 대한 블로그입니다. 또한 공식 문서를 살펴볼 수 있습니다.
이 pastebin
링크에서 create table
및 insert
명령을 찾을 수 있습니다.
작가: Shihab Sikder