sailorCat

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..

  • 공백이 들어있는 필드 이름을 사용하기 위해서 더블 쿼트 " " 로 감싸주어야 한다. 이런 방식으로 필드 이름을 지으면 사용할 때도 " "로 감싸야 해서 번거롭다. value값이 NULL이면 뒤에 있는 숫자를 반환한다. COALESCE( value, 0 ) 콜레스

  • 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 세션 아이디를 기준으로 두 개의 테이블을 ..

  • SQL 연결은 다음과 같다. sql을 로드하고 주소로 연결한다. %sql postgresql://guest:사용자 아이디@주소:서버/db명 guest로 접속한다. SELECT의 *는 전체를 의미한다. FROM 스키마.테이블; 연속으로 명령을 하고 싶을 때 반드시 세미콜론을 붙인다. DISTINCT는 유일한 밸류를 선택한다.