반응형
6강. 여러 개의 값에 대한 조작
여러 값을 집약해서 하나의 값으로 만들거나, 다양한 값을 비교하는 경우
새로운 지표 정의
- 방문한 사용자 수 중에서 특정한 행동 (클릭 또는 구매 등)을 실행한 사용자의 비율
- CTR (클릭 비율 : Click Through Rate)
- CVR (컨버전 비율 : Conversion Rate)
- 문자열 연결하기 - concat
- 여러 개의 값 비교하기
- 분기별 매출 증감 판정 - case when , sign(q2-q1)
- 연간 최대/최소 4분기 매출 찾기 - greatest(q1,q2,q3,q4) , least(q1,q2,q3,q4) (컬럼끼리 비교)
- 연간 평균 4분기 매출 계산하기 - coalesce , sign 활용 (NULL의 경우 coalesce로 0으로 만든 후 sign으로 0을 호출하여 평균 계산에 포함시키지 않음)
- 2개의 값 비율 계산하기
- 정수 자료형의 데이터 나누기
- CTR (clicks / impression) 의 경우 분모의 자료형을 double로 변환해주어야한다.
- percent값이기에 100.0을 곱해준다. (자동으로 자료형 변환)
- 0으로 나누는 것 피하기
- NULL전파 사용 : NULL을 포함한 데이터의 연산 결과가 모두 NULL이 되는 SQL성질
- NULLIF(impressions,0) , CASE WHEN impressions = 0 THEN NULL ELSE impressions END
- 정수 자료형의 데이터 나누기
- 두 값의 거리 계산하기
- 데이터 분석이라는 분야에서 물리적인 공간의 길이가 아닌 거리라는 개념이 많이 등장
- 평균에서 어느 정도 떨어져 있는지, 작년 매출과 올해 매출에 어느 정도의 차이가 있는지 등
- 사용자와 구매 경향이 비슷한 사용자를 뽑는 상황에서도 거리의 개념이 중요함
- sqrt(power(x1-x2,2)
- 날짜/시간 계산하기
- 날짜 변환 timestamp(register_stamp)
- 날짜 더하기 timestamp_add(timestamp(register_stamp), interval 1 day)
- 날짜 빼기 timestamp_sub(timestamp(register_stamp), interval 1 month)
- 날짜 차이 구하기 date_diff(CURRENT_DATE, date(timestamp(register_stamp)), day)
- 등록나이 구하기 floor((CAST(replace(substring(register_stamp, 1 ,10), '-', '') AS integer) - CAST(replace(birth_date, '-', '') AS integer) ) / 10000)
- 현재나이 구하기 floor((CAST(replace(CAST(CURRENT_DATE AS string), '-', '') AS int64) - CAST(replace(birth_date, '-', '') AS int64) ) / 10000)
- IP 주소 다루기
- 보통 문자열로 저장됨
- 정수로 IP 주소 다루기
- CAST(split(ip,’-’)[SAFE_ORDINAL(1)] AS int64) AS ip_part_1
- CAST(split(ip,’-’)[SAFE_ORDINAL(2)] AS int64) AS ip_part_2
- CAST(split(ip,’-’)[SAFE_ORDINAL(3)] AS int64) AS ip_part_3
- CAST(split(ip,’-’)[SAFE_ORDINAL(4)] AS int64) AS ip_part_4
- 정수 자료형으로 변환
- CAST(split(ip,’-’)[SAFE_ORDINAL(1)] AS int64) * pow(2,24) AS ip_part_1
- CAST(split(ip,’-’)[SAFE_ORDINAL(2)] AS int64) * pow(2,16) AS ip_part_2
- CAST(split(ip,’-’)[SAFE_ORDINAL(3)] AS int64) * pow(2,8) AS ip_part_3
- CAST(split(ip,’-’)[SAFE_ORDINAL(4)] AS int64) * pow(2,0) AS ip_part_4
- IP 주소를 0으로 메우기
- CONCAT(lpad(split(ip,'.')[SAFE_ORDINAL(1)], 3, '0'), lpad(split(ip,'.')[SAFE_ORDINAL(2)], 3, '0'), lpad(split(ip,'.')[SAFE_ORDINAL(3)], 3, '0'), lpad(split(ip,'.')[SAFE_ORDINAL(4)], 3, '0'))
- lpad 함수 : 지정한 문자 수가 되게 문자열의 왼쪽을 메우는 함수
반응형
'Data Analysis > SQL Recipe for Data Analysis' 카테고리의 다른 글
[SQL 레시피] 시계열 기반으로 데이터 집계하기 (0) | 2023.11.14 |
---|---|
[SQL 레시피] 하나의 테이블에 대한 조작 (0) | 2023.11.13 |
[SQL 레시피] 하나의 값 조작하기 (0) | 2023.11.13 |
[SQL 레시피] 데이터의 종류 (0) | 2023.11.07 |
[SQL 레시피] BigQuery 환경세팅 (0) | 2023.11.07 |