본문 바로가기
Data Analysis/SQL

13.[SQL] mysql [문자열 연결 function] MySQL의 group_concat (oracle LISTAGG)

by Hagrid 2022. 11. 19.
반응형

- 고객들의 일자별 하루 행동패턴을 보고싶을때 어떻게 보면 좋을까 ?

1) MYSQL

  • cust_seq = 고객번호
  • Reg_dttm = 로그가 등록된 일자
  • tracking_cd = 행동한 로그
select cust_seq
,date(reg_dttm)
        ,reg_dttm 
        ,tracking_cd 
from cust_tracking_log ctl 
-- order by  reg_dttm
  1. 로그를 기록하는 테이블을 일자별로 나열한다.
  2. 아래와 같이 코드를 작성하면 고객별 , 일자별 로그가 기록된다.
  3. select cust_seq ,date(reg_dttm) GROUP_CONCAT tracking_cd SEPERATOR "-") as 행동양식 from ( select cust_seq ,date(reg_dttm) ,reg_dttm ,tracking_cd from cust_tracking_log ctl order by reg_dttm ) a group by cust_seq ,date(reg_dttm)```
  4. 일자별 로그를 행동양식별로 group by 하면 -> 패턴별 갯수가 나온다.!

GROUP_CONCAT?

그룹별로 문자열을 묶어서 출력해주는 함수

  • SEPARATOR는 구분자를 지정해주는 것
  • Default 값(명시 X)은 ','
  • 순서를 지정하고 싶다면
  • 이런식
      select 
      group_concat(column order by column seperator ~) 

2) Oracle

  • 문법 : LISTAGG(column, 구분자) within group(order by column)
SELECT 
grade, LISTAGG(custuer, ",") within group(order by custuer)
FROM 
custuer_grade
GROUP BY 

함수는 다르지만, 사용방법은 동일.

  • SEPERATOR 문자 없이 바로 구분자 지정

데이터 정렬

  • LISTAGG 뒤에 within group(order by column) 사용.
반응형

댓글