[PostgreSQL] group by 그리고 string_agg & array_agg

식빵·2023년 4월 9일
0

postgresql-memo

목록 보기
10/34
post-thumbnail

👏 테스트 테이블 생성

DDL

create table orders
(
    order_id smallint not null,
    customer_id      varchar(50),
    order_date       timestamp,
    constraint pk_orders primary key (order_id)
);

DataSet



🎯 고객별 주문 리스트 뽑아내기

위에서 생성한 테이블에서 customer_idgroup by 를 하요
각 고객별로 주문 건수, 주문id 리스트 등을 뽑아내려고 합니다.

이때 주문 건수는 단순하게 count(*) 를 사용하면 될 거 같습니다.
그렇다면 주문 id 리스트 는 어떻게 뽑아낼까요?
이때 사용할 수 있는 게 string_agg 또는 array_agg 입니다.


Query Example

select customer_id
 	 , count(*) as cnt
     , string_agg(
           order_id::text,
           ','
           order by order_id desc -- 특이하게 order by syntax 를 여기서 사용할 수 있습니다.
       ) as order_id_string_list,
     , array_agg(
            order_id 
            order by order_id desc -- string_agg 와 마찬가지로 order by 사용 가능
       ) as order_id_array
from nw.orders
group by customer_id

이렇게 쿼리를 수행하면 아래와 같은 결과가 나옵니다.


가끔 group by 를 통해서 grouping data 들이 뭐가 있는지 체크할 때 쓸만할 거 같네요.
이 글을 보시는 분들도 자신의 필요에 맞게 사용하시길 바랍니다.


참고 링크

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글