PostgreSQL 컬럼 값 합치기

김무성·2022년 2월 22일
0

SQL

목록 보기
4/7

STRING_AGG

  • group by와 함께 사용하며 그룹화 할 때 컬럼 값들을 지정된 구분자를 이용하여 합함
  • STRING_AGG 함수는 seperator를 항상 지정해줘야 함
SELECT product, STRING_AGG(CAST(profit AS VARCHAR), ',') FROM sales GROUP BY product;
  • profit은 숫자이기 때문에 VARCHAR 타입으로 캐스팅을 해줘야 함

  • STRING_AGG도 함수 내 DISTINCT와 정렬을 하지만 다른 컬럼이 아닌 함수 내에 쓰인 컬럼에 대해서만 가능
    ( 글자에 대한 정렬만 가능 )

SELECT country, STRING_AGG(DISTINCT product, ',' ORDER BY product DESC) FROM sales GROUP BY country;

  • 다른 컬럼에 대해 정렬을 하려면 미리 FROM 절에 정렬을 실행한 서브쿼리를 활용

Example

  • 연도별 판매한 product를 판매량이 높은 순으로 정렬

  • 먼저, product별 profit 합계를 구한 서브쿼리를 활용

# PostrgreSQL은 FROM 절 서브쿼리에서 먼저 정렬을 하고 그대로 출력한다.
SELECT year, STRING_AGG(product, ',') as products
FROM (SELECT year, product, sum(profit) as profit FROM sales GROUP BY product, year ORDER BY profit DESC) a 
GROUP BY year;

ARRAY_AGG

  • group by와 함께 사용하며 그룹화 할 때 array를 형태로 컬럼 값을 합함
  • ARRAY_AGG 함수는 seperator를 지정해주지 않아도 됨
SELECT product, ARRAY_AGG(CAST(profit AS VARCHAR)) FROM sales GROUP BY product;

|| (버티컬바) 이용

  • 컬럼 값들을 버티컬 바 사이의 문자열과 함께 문자열로 합함

Example

  • t_user_info 테이블에 phc란 아이디와 phc 5.0이라는 이름을 합침
select user_id || ' - ' || user_name from t_user_info where user_id = 'phc'

Concat

  • 컬럼 값들을 두번째 인수의 문자열을 기준으로 양 옆으로 합함
select Concat(user_id, ' - ', user_name) from t_user_info where user_id = 'phc'

Reference

profile
graph data scientist

0개의 댓글