ON 1 = 1에 대해 공부하다가 자연스레 발견하게된 WHERE 1 = 1 WHERE 1 = 1 1 = 1은 참(True)을 의미한다. WHERE 1 = 1은 WHERE 참(True)와 같다. SELECT * FROM table WHERE 1 = 1 AND column = '조건'; 즉, column이 ‘조건’에 해당하는 데이터를 모두(참)...
[MySQL] JOIN ON 1 = 1
SQL로 데이터 분석을 하다가 모르는 문법이 나타났다. 아래와 같은 JOIN을 하는 경우 ON 조건에 관한 부분이었다. table1 AS B JOIN table2 AS B ON 1 = 1 흔히 사용해오던 JOIN 방법은 다음과 같았다. ON table1.column = table2.column ON table.column BETWEE...
리텐션 - 다른 테이블의 속성으로 코호트 분석
legislators 테이블 SELECT * FROM legislators 성별 앞서 진행한 JOIN 조건들과 동일하되, legislators 테이블을 추가로 JOIN 한다. 날짜와 state로 살펴본 것과 달리 성별에 따른 코호트 숫자를 알아본다. SELECT D.gender, COALESCE(DATE_PART('year', AGE(C...
리텐션 - 시계열 데이터에서 코호트 분석하기
첫 임기 연도, 기간별 코호트 숫자 이전 게시글에 LEFT JOIN을 한 이유에 대해 설명하지 않은 것 같아서 작성해보려고 한다. 만약 임기 시작 날짜와 끝나는 날짜가 다음과 같다고 가정한다. term_start : 2018-01-03 term_end : 2018-11-06 date_dim 테이블의 date 컬럼에서 12월 31일에 해...
리텐션 - 리텐션 정확도 향상을 위한 시계열 조절
ID별 첫 번째 임기 시작 날짜 SELECT id_bioguide, MIN(term_start) AS first_term FROM legislators_terms GROUP BY id_bioguide; ID별 임기 period 계산 위 쿼리를 서브쿼리로 사용한다. 위 쿼리와 legislators_terms 테이블을 ID를 기준으로 J...
리텐션 - 기본 리텐션 커브를 위한 SQL
데이터 셋 미국 의회 입법가 데이터셋을 사용한다. 첫 번째 term 여러번 임기한 사람들이 있다. SELECT id_bioguide, COUNT(*) FROM legislators_terms GROUP BY id_bioguide; 아이디별로 가장 처음 임기했던 기간을 조회한다. 아이디별로 여러번 임기한 사람들이 있기 때문에 가장...
계절성 비교 - 다중 구간 비교
다중 구간 비교 Book stores에 해당하는 데이터만 조회한다. LAG 함수를 사용하여 같은 달에 해당하는 현재, 1년 전, 2년 전, 3년 전 매출 컬럼을 생성한다. ex) 95년도 1월, 94년도 1월, 93년도 1월, 92년도 1월 SELECT sales_month, sales, LAG(sales, 1) OVER...
계절성 비교 - 구간 비교 작년과 올해 비교
작년과 올해 비교 Book stores에 해당하는 날짜와 해당 날짜의 월만을 추출한다. SELECT sales_month, DATE_PART('month', sales_month) AS month FROM retail_sales WHERE kind_of_business = 'Book stores'; 월별...
계절성 분석 - 구간 비교 YoY과 MoM
구간 비교 LAG() 함수를 사용하여 이전 날짜와 이전 날짜의 매출 컬럼을 생성한다. 이는 현재와 이전의 매출을 비교하기 위함이다. SELECT kind_of_business, sales_month, sales, LAG(sales_month) OVER(PARTITION BY kind_of_business ORDER BY sales_month) ...
시간 윈도우 롤링 - 누적값 계산
누적값 계산 누적값을 계산하는 쿼리이다. 연도별로 누적 매출 합계를 구한다. -- JOIN 이용 SELECT A.sales_month, A.sales, SUM(B.sales) AS sales_ytd FROM retail_sales AS A JOIN retail_sales AS B ON DATE_PART('year', A....