인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

JUNG JONGSEOK님의 프로필 이미지

작성한 질문수

다양한 사례로 익히는 SQL 데이터 분석

과거 30일간 페이지별 조회수와 순페이지(세션 고유 페이지) 조회수 SQL로 구하기

쿼리에 대한 질문이 있습니다.

작성

·

64

0

select page_path, count(*) as page_cnt, count(distinct sess.sess_id) as unique_page_cnt

from ga.ga_sess_hits his

join ga.ga_sess sess

on his.sess_id = sess.sess_id

where visit_stime >= ('2016-11-01'::date - interval '30 days') and visit_stime < '2016-11-01'

and hit_type = 'PAGE'

group by page_path

order by 2 desc;

저는 위와 같이 쿼리를 작성했습니다만, 교육 자료에서 temp_01, temp_02로 각각 나눠서 page_cnt와 unique_page_cnt를 구하는 것에 어떠한 장점이 있어서 교안의 쿼리 대로 작성하는지 궁금합니다. 제가 단순히 생각하기에는 비효율적으로 보여서요! 제 쿼리가 비효율적일 수도 있는데, 장단점을 들어보고 싶습니다.

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

강의에서 사용된 쿼리는 설명을 차근차근, 쉽게 하기 위해서 작성되었습니다. 그래서 핵심 블록 단위로 With절을 사용한 것입니다. 강의의 설명을 바탕으로 함축적인 쿼리가 자신에게 맞다고 생각하시면 그게 더 효율적인 쿼리 입니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.
JUNG JONGSEOK님, 질문 주신 내용에 대해 답변 드리겠습니다.

질문하신 쿼리는 페이지별 조회수와 순수한 페이지 조회수를 동시에 구하는 쿼리로 보입니다. 궁금해 하신 부분은 쿼리를 하나로 작성했을 때와 여러 테이블을 나누어 작성했을 때의 차이인 것 같습니다. 이와 관련한 답변을 드리자면:

  1. 쿼리를 하나로 작성했을 때의 장점:

    • 코드가 더 간결하며, 한 번의 group by를 통해 필요한 값을 모두 구할 수 있어 처리 속도가 빠를 수 있습니다.
    • 필요한 값들을 한 번에 select하게 되므로 코드의 양이 줄어듭니다.
  2. 쿼리를 여러 테이블로 나누었을 때의 장점:

    • 복잡한 쿼리를 쪼개어 보시면 쿼리 이해에 도움이 될 수도 있습니다.
    • temp_01, temp_02 형태로 나누어 작성하면 각 테이블의 역할이 명확하게 드러나며, 쿼리 로직이 복잡한 경우 중간 결과를 확인하기 쉬워 디버깅이 용이합니다.
    • 경우에 따라 여러 테이블을 나누어 작성하는 것이 최적화에 유리할 수 있습니다. 예를 들어, 중복되는 계산이 적고 메모리 사용량을 줄일 수 있을 때입니다.

결국 SQL마다 데이터를 처리하는 방식과 상황에 맞게 선택하는 것이 중요합니다. 데이터 셋의 크기나 쿼리 작성의 편의성에 따라 어떤 방식이 유리할지는 상황에 따라 다를 것입니다.

이와 관련된 내용에 대해 좀 더 구체적인 예제와 설명이 필요하시다면, 과거 30일간 페이지별 조회수와 순페이지 조회수 구하기 이 URL에서 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.