본문 바로가기

분석/데이터분석42

[SQL] null 체크 (presto, athena) 어떤 DB (데이터베이스)던지, 표준 SQL 문법을 지원하기 때문에 특정 컬럼의 값이 null 일때의 처리는 동일한 구문으로 할 수 있다. 예를 들어 아래와 같이 테이블이 있다고 가정을 하면, create table tbl01 ( col1 varchar, col2 varchar ) col1 의 값을 출력하는데, col1의 값이 null 인경우 'none' 이라는 문자열로 출력하기를 원한다고 하면 아래와 같이 case when 구문으로 처리하면 어떤 db 에서든지 작동한다. select case when col1 is null then 'none' else col1 end as new_col1, col2 from tbl01 하지만, sql 문장이 길어져서 간결하게 만들려고 할 때에는 presto (athe.. 2022. 6. 3.
[SQL] 날짜 차이 계산하기 (presto, athena) Presto (또는 athena)에서 날짜 차이를 구하는 방법에 대해서 알아보자. 기본적으로 date_diff 라는 함수를 사용한다. date_diff( 'unit', '시작일자', '종료일자') 의 형식으로 사용하는데, 여기서 'unit'에 따라서 차이를 일단위로 계산할지 또는 월단위로 계산할지 등등을 정할 수 있다. unit 으로는 'YEAR', 'QUARTER', 'MONTH', 'WEEK', 'DAY', 'HOUR' , 'MINUTE', 'SECOND' 등을 사용할 수 있다. select date_diff('day', date('2022-01-01'), date('2022-02-01')) --> 결과 : 31 한가지 주의할 점은 '시작일자' 와 '종료일자'가 날짜 형식의 타입이어야 한다. date.. 2022. 5. 23.
[SQL] 주단위 집계 꼭!! 주의해야할 점 (MySql) 쿼리(Query) 작업 시에 주 (Week) 단위로 집계를 해야한다면, 꼭 주의해야할 점이 하나 있다. 그것은 특정 일자가 어느 주에 속하는지에 따라서 다른년도의 주로 잘 못 계산되는 경우가 무척 많기 때문이다. 특히 연의 마지막주와 연의 첫번째 주에서 이 오류를 자주 범하게 된다. 주 번호 (week number) 를 계산하는 방식에는 여러 가지가 있는데, 예를 들어서 매주 월요일이 있는 날짜의 주를 해당 주의 기준으로 본다고 하면, 위 달력에서 22년도 1월 1일과 22년도 1월 2일은 21년도의 52번째 주에 포함이 된다. 즉, 22년 1월 3일부터 22년도 첫번째주 (01주)가 되는 것이다. 그리고 반대의 경우도 발생할 수 있다. 특정 연도의 12월 30일 또는 31일이 다음 년도의 첫번째 주에 .. 2022. 5. 16.
Mysql 샘플링 (Sampling) : 랜덤 추출 Mysql 에서 랜덤(무작위)으로 몇개의 데이터를 추출하는 경우에 사용할 수 있는 쿼리 문장이다. order by 절에 rand() 함수를 적용하면 데이터가 랜덤한 순서로 추출이되면 limit 절로 그 갯수를 정하는 방식이다. Select * From tb_sample Order by rand() Limit 100 위의 쿼리는 tb_sample 이라는 테이블에서 랜덤으로 100개의 raw 를 추출하는 쿼리문장이며, 필요에 따라서 Where 절을 추가할 수 있다. Where 절이 추가되면, 조건이 적용된 데이터중에서 랜덤하게 100개를 추출한다. 2022. 4. 6.
MySQL 날짜/시간 함수 mysql 날짜/시간 함수 정리 -- 현재시간 날짜 구하기 select now(), current_date, current_time -- 날짜 더하고 빼기 select now(), date_add(now(), interval 1 day) select now(), date_add(now(), interval 4 hour) select now(), date_sub(now(), interval 1 day) select now(), date_sub(now(), interval 4 hour) -- 두 시간의 차이 select timestampdiff(MONTH, now(), date_add(now(), interval 4 month)) 시간주기에 아래의 단위를 사용할 수 있다. SECOND : 초 MINUTE :.. 2022. 3. 29.
애플뮤직 A/B Test ? 아이폰 또는 아이패드의 설정 홈에서 "Apple Music 6개월 무료 이용" 이라는 메뉴가 보였다가 사라졌다가 또 다시 몇 일 후에 보였다가 한다. A/B 테스트를 하고 있는 듯한 느낌. 무시 하다가 오늘은 그냥 낚여 봄. 애플에서는 신규기기를 구입하면 애플뮤직등을 일정 기간 무료이용할 수 있게 하는데 낚이러 들어갔더니 근 2년전에 샀던 AirPod 구매로 인한 무료 6개월 구독권? 구글 뮤직과 비교해봐야지 ! 2021. 10. 2.
일련번호(날짜) 생성 in Presto 1. 일련번호 생성 select seq from unnest(sequence(1, 10, 1)) as t1(seq) select seq from unnest(sequence(20, 0, -2)) as t1(seq) 2. 일련의 날짜 생성 SELECT dt FROM unnest(SEQUENCE(DATE('2020-06-01'), DATE('2020-06-14'), INTERVAL '1' DAY)) AS t1(dt) SELECT dt FROM unnest(SEQUENCE(DATE('2020-06-01'), DATE('2020-06-14'), INTERVAL '3' DAY)) AS t1(dt) 3. 응용 : 1부터 100까지의 수 중에서 랜덤하게 10개 뽑기 -- 수의 중복 없이 뽑기 select seq fr.. 2021. 4. 20.
M+3 의 재 구매율, M+(1,2,3)의 재 구매율 M+3 의 '재구매율' 이란? 예를 들어 1월의 (신규) 구매자들 중에 4월달에도 재구매를 한 비율을 뜻한다. M+(1,2,3) 의 '재구매율' 이란? 예를 들어 1월의 (신규) 구매자들 중에 2월부터 4월까지 재구매를 한 비율을 뜻한다. 이를 SQL를 이용하여 계산해보도록 하자. 1. 아래와 같이 tbl_uesr, tbl_order 라는 테이블이 있다고 가정합니다. 2. 2019년1월 부터 2019년 12월까지 12개월을 대상으로 'M+3 재구매율' select base_mon.now_dt , count(distinct base_mon.user_id) as cnt_curmon , count(distinct future_mon.user_id) as cnt_nextmon , count(distinct fu.. 2020. 6. 25.
DBeaver 로 AWS Athena 접속하기 1. DBeaver의 데이터베이스 접속 화면에서 Athena 를 검색하여 선택합니다. 2. 선택을 하면 아래 그램과 같이 - Region - S3 location - Access Key - Scret Key 를 입력해줘야 합니다. 3. 위 창의 입력정보를 얻기 위해서는 웹상에서 AWS의 콘솔에 로그인을 합니다. 창의 오른쪽 상단을 보면 Region ('서울'이라고 나와있는)을 선택하는 화면이 있는게 여기서 Region 코드를 얻을 수 있습니다. 버지니아 북부라면 us-east-1 이 리젼이 됩니다. 4. 위의 지역 옆에 내 계정이 나와 있는 부분을 클릭하면 아래와 같이 '내 보안 자격증명'이라는 메뉴가 보입니다. 클릭하여 들어갑니다. 5. 아래와 같은 화면이 나타나는데 '엑세스 키 만들기' 버튼을 클릭하.. 2020. 6. 9.