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_id
로 group 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 들이 뭐가 있는지 체크할 때 쓸만할 거 같네요.
이 글을 보시는 분들도 자신의 필요에 맞게 사용하시길 바랍니다.