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

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

최원빈님의 프로필 이미지
최원빈

작성한 질문수

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

채널별 고유/주문 사용자 건수와 매출 금액 및 비율 SQL로 구하기 - 02

join 관련 질문

작성

·

215

0

안녕하세요 선생님:)

다름이 아니라 join 관련 질문이 있어요.

저번 강의에서도 말씀하신 것처럼 join을 session_id로 하셔야 된다고 하셨는데, 만약에 user_id로 하면 결과 값이 드라마틱하게 달라질까요?

전에 MAU를 신규 사용자와 기존 사용자로 구분할 때는 join을 하실 때 user_id로 하셨는데, 이때는 사용자를 수를 구하는 것에 집중하여 user_id로 한 것일까요?

답변 1

1

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

안녕하십니까,

어느 테이블과 어느 테이블을 user_id로 조인한다는 건지요?

ga_sess와 orders 테이블을 user_id로 조인한다는 의미로 간주하고 답변드리면,

  1. 저번 강의에서도 말씀하신 것처럼 join을 session_id로 하셔야 된다고 하셨는데, 만약에 user_id로 하면 결과 값이 드라마틱하게 달라질까요?

    => 네, 드라마틱하게 달라집니다.

ga_sess 테이블은 user_id로 m, orders 테이블로 user_id로 m이기 때문에 ga_sess와 orders 테이블을 user_id로 조인하면 m:m 조인이 되어서 원하는 결과 집합이 되지 않습니다.

  1. 전에 MAU를 신규 사용자와 기존 사용자로 구분할 때는 join을 하실 때 user_id로 하셨는데, 이때는 사용자를 수를 구하는 것에 집중하여 user_id로 한 것일까요?

    => 정확히 어떤 쿼리를 의미하는지 잘 모르겠지만, 그냥 실습 코드중에 ga_sess와 ga_users를 조인하는데 user_id로 왜 조인했는지를 묻는 걸로 간주하고 답변 드리면,

    사용자 수를 구하는 거와 별개로, ga_sess를 기준으로 group by를 해야 하는데, 필터링 해야 하는 조건이 ga_users에 잇습니다. 가령, 사용자가 생성된 특정 일시 같은 경우에는 ga_users에 있기 때문에 해당 조건을 ga_users에서 찾고 ga_sess로 연결하는데 이때 연결키가 user_id로 되어 있습니다. 그리고 조인을 했을 때 ga_sess와 ga_users는 user_id 레벨로 1:m 이기 때문에 조인 결과 레벨로 ga_sess로 만들어지기 때문에 원래 ga_sess 집합 레벨로 동일하게 됩니다. 때문에 user_id로 조인했을 뿐입니다.

    감사합니다.

감사합니다.

최원빈님의 프로필 이미지
최원빈

작성한 질문수

질문하기