Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Datarian
- LEFTJOIN
- 순위함수
- 데이터리안
- 그로스해킹
- 신입 데이터분석가
- 윈도우 함수
- regexp
- 취준
- leetcode
- Retention
- advent of sql
- 독서
- MYSQL
- 누적합
- 리텐션
- row_number
- funnel
- SQL
- python
- 린분석
- 윈도우함수
- 프로그래머스
- dense_rank
- 서브쿼리
- rank
- pandas
- 퍼널분석
- SolveSQL
- 데이터분석
Archives
- Today
- Total
데이터 분석
[퍼널 분석] solvesql | 난이도 4 | 페이지에서 스크롤을 내렸을까? 본문
데이터리안 | SQL 데이터 분석 캠프 | 실전반/문제 해결 역량
[퍼널 분석] solvesql | 난이도 4 | 페이지에서 스크롤을 내렸을까?
딱한아이 2025. 1. 24. 19:04페이지에서 스크롤을 내렸을까?
전체 세션을 입문반 페이지를 본 세션과 안 본 세션으로 나누고, 입문반 페이지를 본 세션에 대해서 스크롤을 한 세션과 하지 않은 세션으로 세분화 해 집계하려 한다. 참고로 개별 세션의 개수를 세어주려면 user_pseudo_id 와 ga_session_id 컬럼을 모두 고려할 것.
문제 조건
1. 입문반 페이지를 본 세션은 아래 조건으로 찾는다
- page_title = “백문이불여일타 SQL 캠프 입문반”
- event_name = “page_view”
2. 입문반 페이지 내에서 스크롤을 한 세션은 아래 조건으로 찾는다
- page_title = “백문이불여일타 SQL 캠프 입문반”
- event_name = “scroll”
3. 동일 세션 내에서 이벤트들 간의 선후 관계를 고려할 것
Solution
WITH pv AS (
SELECT user_pseudo_id
, ga_session_id
, event_timestamp_kst AS pv_at
FROM ga
WHERE page_title = '백문이불여일타 SQL 캠프 입문반'
AND event_name = 'page_view'
), scroll AS (
SELECT user_pseudo_id
, ga_session_id
, event_timestamp_kst AS scroll_at
FROM ga
WHERE page_title = '백문이불여일타 SQL 캠프 입문반'
AND event_name = 'scroll'
)
SELECT (SELECT COUNT(DISTINCT user_pseudo_id, ga_session_id) FROM ga) AS total
, (SELECT COUNT(DISTINCT user_pseudo_id, ga_session_id) FROM ga)
- COUNT(DISTINCT p.user_pseudo_id, p.ga_session_id) AS pv_no
, COUNT(DISTINCT p.user_pseudo_id, p.ga_session_id)
- COUNT(DISTINCT s.user_pseudo_id, s.ga_session_id) AS pv_yes_scroll_no
, COUNT(DISTINCT s.user_pseudo_id, s.ga_session_id) AS pv_yes_scroll_yes
FROM pv p
LEFT JOIN scroll s ON p.user_pseudo_id = s.user_pseudo_id -- 같은 개별 세션에 대해 JOIN (user_pseudo_id, ga_session_id)
AND p.ga_session_id = s.ga_session_id
AND p.pv_at <= s.scroll_at
✅ pv CTE:
입문반 페이지에 방문한 세션의 테이블을 정의한다
✅ scroll CTE:
입문반 페이지에서 스크롤 이벤트를 발생시킨 세션의 테이블을 정의한다
✅ 최종 SELECT절:
- 입문반 페이지를 봤지만 스크롤은 하지 않은 세션에 대해서도 집계해야 하기 때문에 INNER JOIN이 아닌 LEFT JOIN을 수행
- 동일한 개별 세션에 대해 pv, scroll 테이블을 조인
- 두 이벤트 발생 시각 선후관계를 고려하는 조건까지 추가
✔️ 전체 세션 수
✔️ 입문반 페이지를 안 본 세션 수
✔️ 입문반 페이지를 봤지만 입문반 페이지 스크롤은 하지 않은 세션 수
✔️ 입문반 페이지를 봤고 입문반 페이지 스크롤도 한 세션 수
'데이터리안 | SQL 데이터 분석 캠프 | 실전반 > 문제 해결 역량' 카테고리의 다른 글
| [퍼널 분석] solvesql | 난이도 5 | 유입 채널별 실전반 전환율 (0) | 2025.01.24 |
|---|---|
| [퍼널 분석] solvesql | 난이도 5 | SQL 데이터 분석 캠프 실전반 전환율 (1) | 2025.01.24 |
| [퍼널 분석] solvesql | 난이도 4 | 입문반 페이지를 본 세션 찾기 (1) | 2025.01.24 |
| solvesql | 난이도 4 | Stickiness (2) | 2025.01.20 |
| solvesql | 난이도 4 | Classic Retention (1) | 2025.01.20 |