[TIL] SQL 조인할 때 우리가 반드시 고려해야 할 점

오현우·2022년 3월 9일
0

1. 복잡한 조인시 조인 전략을 먼저 수립하는 것이 중요하다.

우리가 하나의 테이블을 만들기 위해 아래와 같은 조인문을 쓴다고 생각해보자.

(딱봐도 복잡하다.)

DROP TABLE IF EXISTS adhoc.hyunwoo_session_summary;
CREATE TABLE adhoc.hyunwoo_session_summary AS
SELECT
  LEFT(B.ts, 7) AS month,
  A.channel as channel,
  COUNT(DISTINCT A.userid) AS uniqueUsers,
  COUNT(DISTINCT CASE WHEN C.amount>0 THEN C.sessionid END) AS paidUsers,
  ROUND(paidUsers*100.0/NULLIF(uniqueUsers, 0), 2) AS conversionRate,
  SUM(C.amount) AS grossRevenue,
  SUM(CASE WHEN C.refunded=True then C.amount ELSE 0 END) AS netRevenue
FROM raw_data.user_session_channel A
LEFT JOIN raw_data.session_timestamp B ON A.sessionid = B.sessionid
LEFT JOIN raw_data.session_transaction C ON A.sessionid = C.sessionid 
GROUP BY 1, 2      
ORDER BY 1, 2;

그냥 생각없이 쿼리를 짠다고 생각하면, 위와 같은 쿼리를 짤 수 있을까?
아니 불가능하다. 하나의 테이블을 만들 때는 우리가 살리고 싶은 피쳐들이 각기 존재한다.
이럴 때 테이블의 성격을 고려하지 않으면 우리가 원하는 피쳐가 담긴 테이블을 만들 수 없다.

이럴 때 테이블의 속성을 먼저 고려하는 것이 중요하다.

2. 테이블의 속성을 잘 고려하자

-one to one

완전한 1:1 대응이 되는 테이블과 한쪽이 크기가 더작아 한쪽의 부분집합이 되는 1:1 테이블

-one to many

한쪽의 크기가 월등히 커서 테이블 증폭 문제가 발생

-many to many

1:1로 바꾸거나 1:다수로 바꿔줘야 함

3. ALIAS 를 잘 활용해서 쿼리문의 가독성을 높히자.

profile
핵심은 같게, 생각은 다르게

0개의 댓글