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활동하기
What a Beautiful Data!darami 님의 블로그입니다.