Group by

넘어산·2023년 12월 20일
0

TIL

목록 보기
15/37

GROUP BY & Aggregate

  • 테이블 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산
  1. 그룹핑 할 필드를 결정(하나 이상)
  2. 그룹별로 계산할 내용 결정
    • 여기서 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 -- GROUP BY mon, GROUP BY LEFT(ts, 7)
ORDER BY 1 -- default는 ASC, 내림차순 DESC

가장 많이 사용된 채널은 무엇인가?

  • 가장 많이 사용되었다는 정의
    • 사용자 기반 혹은 세션 기반
  • 필요 정보: 채널 정보, 사용자 정보 혹은 세션 정보
  • 먼저 어느 테이블을 사용하는 지

월별 유니크 사용자 수

  • 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 값에 대하여
    • 월별로 몇 번을 방문했던 한번만 카운트

0개의 댓글