What a Beautiful Data!

solvesql 입문반 페이지를 본 세션 찾기 mysql

by darami

입문반 페이지를 본 세션 찾기

 

풀이 시도 1 (오답)

SELECT COUNT(DISTINCT g1.ga_session_id)total
,(COUNT(DISTINCT g1.ga_session_id)
- COUNT(DISTINCT CASE WHEN g1.event_name='page_view'
AND g1.page_title='백문이불여일타 SQL 캠프 입문반' THEN g1.ga_session_id END))pv_no
,COUNT(DISTINCT CASE WHEN g1.event_name='page_view'
AND g1.page_title='백문이불여일타 SQL 캠프 입문반' THEN g1.ga_session_id END)pv_yes
FROM ga g1
JOIN ga g2 ON g1.ga_session_id=g2.ga_session_id
WHERE g1.user_pseudo_id=g2.user_pseudo_id

오답

- 세션 아이디도 같고 userid도 셀프조인 한 것 이랑 같은데 왜 오답이 나오는 것일까?

- 일단 맨 처음 시도한 것으로 풀것이지만, 스터디하면서 궁금증을 해결하기. 

---> 아아! 이렇게 하면 userid가 다른건 제외해버리니까 답보다 결과값이 줄어들지!

 

풀이시도 2 (정답)

SELECT COUNT(DISTINCT user_pseudo_id, ga_session_id)total
,(COUNT(DISTINCT user_pseudo_id, ga_session_id)
-(SELECT COUNT(DISTINCT user_pseudo_id, ga_session_id)
FROM ga
WHERE event_name='page_view'
AND page_title='백문이불여일타 SQL 캠프 입문반'))pv_no
,(SELECT COUNT(DISTINCT user_pseudo_id, ga_session_id)
FROM ga
WHERE event_name='page_view'
AND page_title='백문이불여일타 SQL 캠프 입문반')pv_yes
FROM ga

-DISTINCT 뒤에 두개써주면 되지 않나? 하고 생각했는데 맞았던것 새로운 발견! 

출처

더 상세 설명: 출처 

 

[DB SQL] 중복제거 (DISTINCT)

DISTINCT란 중복제거 키워드입니다. SELECT로 DB에서 컬럼을 조회할 때, 중복되는 값을 제거하고 조회할 때 사용합니다. 즉, DISTINCT 키워드를 붙인 필드(컬럼)는 중복 값을 합쳐 한 번만 출력합니다. Co

bio-info.tistory.com

 

 

배운점, 인사이트

- 굳이 알리아스 로 연산하려고 애써서 서브쿼리 만들지 말기

- 편리한 SELECT 절 서브쿼리 쓰는 법에 능숙해지기 

- SELECT DISTINCT 뒤에 컬럼 두개 쓰는 것!

- 연습에서는 왜 그런지 많이 고민해보되 실전에서는 바로 다른 풀이로 풀어보기!

- 쿼리 결과값을 알 수 있다면, 여기서 수가 적어지는지, 많아지는지를 파악하여 오답 원인의 힌트를 얻을 수 있다!

 

다른 분 풀이 

가장 권장하는 풀이 : WITH 절 풀이 , 디버깅 할 때 좋음 

블로그의 프로필 사진

블로그의 정보

다람

darami

활동하기