SQL/AWS Redshift 8
-
세 가지의 테이블을 JOIN 하여 사용한다. 여기에서 session_timestamp, user_session_channel 두 개의 테이블은 sessionId 가 같은 수로 존재하지만 session_transaction 테이블에는 sessionId가 덜 존재한다. 그래서 두 테이블은 Inner JOIN 하고, session_transaction 테이블은 LEFT JOIN한다. 없는 sessionId는 NULL값으로 채워지게 된다. 매칭이 안되는 sessionId가 있는지 알아본다. 두 개의 방향을 모두 검사해야 한다. FROM schema.table1 A JOIN schema.table2 B ON A.primary = B.primary LEFT JOIN schema.table3 C ON A.primar..
-
-
Boolean 값에서 항상 True False 값만 있는 것이 아니라 Null값도 존재할 수 있다. Flag is True = Flag is not False 만약 Flag에 Null 값이 없고 오직 True, False로만 이루어져 있다면 이 식이 맞지만 Null값이 존재할 경우 not False가 반드시 True라고 할 수 없다. flag가 식에 해당되면 1을 더하는 문장을 실행한다. CASE WHEN flag = True THEN 1 END 여기에 COUNT() true_cnt1으로 출력한다. NULL의 비교와 연산은 항상 IS, IS NOT으로 수행한다. 만약에 =, !=, 로 수행하면 잘못된 결과가 나온다.
-
-
JOIN 두 개 이상의 테이블들을 공통 필드를 통해 merge 하는데 사용된다. 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합할 수 있다. Join의 문법 SELECT A.*, B.* FROM raw_data.table1 A ( ) JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2 WHERE A.ts >= '2019-01-01'; ( ) 괄호 안에는 JOIN의 종류에 따라 생략 될 수도 있고 INNER, LEFT, RIGHT, FULL, CROSS 가 들어갈 수 있다. JOIN 할 때 고려해야 하는 점 - 중복 레코드가 없어야 한다. - Primary Key의 유니크함이 보장되어야 한다. - JOIN 하는 테이블 간의 관계를 명확히..
-
adhoc 이라는 폴더는 DB 사용자가 실험을 하거나 새로운 테이블을 만들어 보거나 하는 폴더이다. temp 폴더와 쓰임새가 비슷하다. 이 adhoc이라는 폴더에 새로운 테이블을 만들어서 데이터 레코드를 카피해 보겠다. 만약 테이블이 이미 존재한다면 DROP 하는 명령어를 사용한다. 그리고 새롭게 테이블을 만든다. FROM은 이미 존재하는 테이블 뿐만 아니라 동적인 범위를 정할 수 있다. session_timestamp A, user_session_channel B를 조인한 테이블에서 B의 모든 내용과 A의 ts를 합쳐서 seoann_session_summary로 만들었다. adhoc.seoann_session_summary 에서 ts와 userid가 함께 존재하기 때문에 간단히 mau를 찾을 수 있다...
-
가장 많이 사용된 채널을 찾는다. raw_data 스키마에서 user_session_channel 테이블 안에 가장 많이 사용된 채널을 찾는다. 여기서 많이 사용되었다는 기준은 세션이 만들어진 수, 유저의 아이디 수 두가지로 찾을 수 있다. 모호한 기준이 주어지면 정확히 하기 위한 질문을 해야 한다. AS count라는 새로운 Column을 만들어낸다. 유저 아이디는 기본키가 아니기 때문에 여러개 있을 수 있다. 세션을 많이 만들었다면 수를 세었을 때 가장 많은 수의 Record가 있을 것이다. 월별 사용자 수를 위해 join을 사용하여 두개의 테이블을 inner join 한다. session_timestamp 는 A, user_session_channel은 B 세션 아이디를 기준으로 두 개의 테이블을 ..
-