PostgreSQL string_agg 함수

Shihab Sikder 2023년6월20일
  1. string_agg()를 사용하여 PostgreSQL에서 문자열 연결
  2. PostgreSQL에서 string_agg()의 복제본 교체
  3. 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)

이제 각 회사의 모든 직원 이름이 출력되는 것을 볼 수 있습니다. 주목하면 SonyBob이 두 번 인쇄된 것을 볼 수 있습니다.

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 tableinsert 명령을 찾을 수 있습니다.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

관련 문장 - PostgreSQL String