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 절 풀이 , 디버깅 할 때 좋음
'SQL > Solvesql' 카테고리의 다른 글
SQL 데이터 분석 캠프 실전반 전환율 (퍼널 분석) (0) | 2022.06.27 |
---|---|
solvesql 페이지에서 스크롤을 내렸을까?mysql 문제풀이 (0) | 2022.06.17 |
solvesql 고액 영수증 찾기mysql 문제풀이 (0) | 2022.06.14 |
클래식 리텐션, Stickiness, 롤링리텐션 My sql (0) | 2022.06.14 |
solvesql 지역별 주문의 특징, 가구 판매의 비중이 높았던 날 찾기, 작품이 없는 작가 찾기 mysql (0) | 2022.06.12 |
블로그의 정보
다람
darami