주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 24일차 본문

데브코스

데이터 엔지니어링 24일차

우솨 2024. 4. 26. 18:07

학습내용

Join이란 ?
SQL조인은 두개 혹은 그 이상의 테이블들을 공통 필드를 가지고 머지하는데 사용된다. 이는 스타스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용된다.
왼쪽 테이블을 LEFT라고 하고 오른쪽 테이블을 RIGHT라고 하면 JOIN의 결과는 방식에 상고나없이 양쪽의 필드를 모두 가진 새로운 테이블을 만들어내게 된다. 조인의 방식에 따라 다음 두 가지가 달라진다
1. 어떤 레코드들이 선택되는지?
2. 어떤 필드들이 채워지는지?

 

조인의 종류



Join시 고려해야 할점
1. 먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크해야한다.
2. 조인하는 테이블들간의 관계를 명확하게 정의해야한다.
3. 어느 테이블을 베이스로 잡을지 결정해야한다.(From에 사용할지)

BOOLEAN타입 
 : True or False 두개만 리턴

 

NULL값 비교
NULL값 비교는 항상 is, is not으로 수행
그렇지 않으면 잘못된 결과가 나옴



NULLIF함수
0으로 나눌 경우 divide by 0 에러 발생
A/NULLIF(B,0) : B가 0일 때 0 대신 NULL로 계산

 

COALESCE 함수
 : NULL값을 다른값으로 바꿔주는 함수

%%sql

SELECT
     value,
     COALESCE(value, 0)
FROM raw_data.count_test;



숙제풀이
채널별 월 매출액 테이블 만들기

%%sql
DROP TABLE IF EXISTS adhoc.suha_monthly_channel_summary;
CREATE TABLE adhoc.suha_monthly_channel_summary AS
SELECT LEFT(ts, 7) "month",  -- "year month"
       channel,
       COUNT(DISTINCT usc.userid) uniqueUsers,
       COUNT(DISTINCT CASE WHEN amount > 0 THEN usc.userid END) paidUsers,
       ROUND(paidUsers*100.0/NULLIF(uniqueUsers, 0),2) conversionRate,
       SUM(amount) grossRevenue,
       SUM(CASE WHEN refunded is False THEN amount END) netRevenue
   FROM raw_data.user_session_channel usc
   LEFT JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid
   LEFT JOIN raw_data.session_transaction st ON st.sessionid = usc.sessionid
   GROUP BY 1, 2
   ORDER BY 1, 2;



느낀 점

저번 숙제를 하고 오늘 숙제풀이를 보면서 sql공부가 아직 부족하다는 것을 느꼈다.

creat문을 위에 쓰고 as만 뒤에 붙여서 제일 처음에 써주면 테이블이 생성되는 걸 저번주에 배울땐 어렵게 느껴졌는데 직접 실습을 해보니 한문장만 위에 붙이면 되는것이라서 어렵지 않고 간편한 문장이란것을 배웠다