GROUP BY & Aggregate
- 테이블 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산
- 그룹핑 할 필드를 결정(하나 이상)
- 그룹별로 계산할 내용 결정
- 여기서 Aggregate 함수
- COUNT, SUM, AVG, MIN, MAX, LISTAGG...
SELECT
LEFT(ts, 7) AS mon,
COUNT(1) AS session_count
FROM raw_data.session_timestamp
GROUP BY 1
ORDER BY 1
가장 많이 사용된 채널은 무엇인가?
- 가장 많이 사용되었다는 정의
- 필요 정보: 채널 정보, 사용자 정보 혹은 세션 정보
- 먼저 어느 테이블을 사용하는 지
월별 유니크 사용자 수
- MAU(Monthly Active User)
- 필요 정보: 시간, 사용자 정보
- 먼저 어느 테이블을 사용하는 지:
- user_session_channel(userId, sessionId, channel)
- session_timestamp(sessionId, ts)
SELECT
TO_CHAR(A.ts 'YYYY-MM') AS month,
COUNT(DISTINCE B.userId) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_sesiion_channel B ON A.sessionId = B.sessionId
GROUP BY 1
ORDER BY 1 DESC;
-
TO_CHAR(A.ts, 'YYYY-MM')
- LEFT(A.ts, 7(
- DATE_TRUNC('month', A.ts) - timestamp type, 01
- SUBSTRING(A.ts, 1, 7)
-
COUNT의 동작을 잘 이해하자
- DISTINCT 없이 쓴다면 모든 userId 값에 대하여
- 월별로 몇 번을 방문했던 한번만 카운트