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

sir.YOO_HWAN·2022년 11월 6일
0

SQL

목록 보기
29/30
  • 고객들의 하루 행동패턴을 보고싶을때 어떻게 보면 좋을까 ?

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. 아래와 같이 코드를 작성하면 고객별 , 일자별 로그가 기록된다.
    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)```
            
  3. 일자별 로그를 행동양식별로 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) 사용.
profile
data analyst

0개의 댓글