- NULL - Pivot Table - Window Function - RANK - SUM
- date type
- date_format
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
<조회한 데이터에 아무 값이 없을 때>
데이터가 없을 때의 연산 결과 변화 케이스
테이블에 잘못된 값이 들어있는 경우
JOIN을 했을 때 값이 없는 경우
방법
없는 값을 제외해주기 - 사용할 수 없는 값일 때 해당 값을 연산에서 제외해주기 → 0으로 간주 ex) 평균 rating을 구하기
- NULL = 데이터 없음 1) NULL 제거를 하지 않았을
- is not null = NULL이 아닌 데이터만 있는 것만 보여줌
2) NULL 제거를 했을 때 (JOIN 시에는 INNER JOIN과 동일)
다른 값을 대신 사용하기
- 사용할 수 없는 값 대신 다른 값을 대체해서 사용하는 방법 - 데이터 분석 시에는 평균값 혹은 중앙값 등 대표값을 이용하여 대체 - 다른 값으로 변경하고 싶을 때
1) 다른 값이 있을 때 - 조건문 이용하기 IF(rating>=1, rating, 대체값) 2) NULL 값일 때 coalesce(age, 대체값)
- 예시
데이터 중 age의 NULL 부분을 다른 값으로 대체해고 싶을 때
customer 테이블에 없는 데이터 중에 age 만 20으로 채우도록 작성
'NULL 제거 부분 20'으로 변경
<조회한 데이터가 상식적이지 않은 값을 가지고 있을 때>
- 조건문으로 값의 범위를 지정 → 상식적인 수준 안에서 범위 지정
- 예시 case 1. 주문 고객의 나이
ex 1) 주문 고객의 나이
15세 미만이거나 80세 초과인 경우 15, 80으로 각각 범위 지정
'15세 미만 = 15세', '80세 초과 = 80세'로 변경
ex 2) 결제 일자
<SQL로 Pivot Table 만들기>
Pivot Table 2개 이상의 기준으로 데이터를 집계할 때 보기 쉽게 배열하여 보여주는 것
Pivot Table 기본 구조ex) 집계 기준 : 일자, 시간 일때 Pivot Table
ex 1) 음식점별 시간별 주문건수 Pivot Table View 만들기 (15~20시 사이, 20시 주문건 기준 내림차순)
음식점별, 시간별 주문건수 집계하기
Pivot View 구조 만들기
Pivot Talbe 도출하기
ex 2) 성별, 연령별 주문건수 Pivot Table View 만들기 (나이는 10~59세 사이, 연령순으로 내림차순)
성별, 연령별 주문건수 집계하기
집계 도출
Pivot View 구조 만들기
Pivot Table 도출하기
<업무 시작을 단축시켜 주는 문법> - Window Function - RANK, SUM Window Function - 각 행의 관계를 정의하기 위한 함수 - 그룹 내의 연산을 보다 쉽게 수행할 수 있도록 도와
Window Function의 기본구조
- window_function 기능 명을 사용해줌 (SUM,AVG와 같이 기능명이 있음) - argument 함수에 따라 작성하거나 생략 가능 - partition by 그룹을 나누기 위한 기준 group by절과 유사 - order by window funtion을 적용할 때 정렬 할 컬럼 기준을 적어줌
RANK - N번째까지의 대상을 조회하고 싶을 때 - 특정 기준으로 순위를 매겨주는 기능 - 주문 건수별 순위 매기기, 결제 시간이 빠른 순으로 순위 매기기 등에 사용
- 예시 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하기
음식 타입별, 음식점별 주문 건수 집계하기
RANK 함수 적용하기
3위까지 조회 후 음식 타이별, 순위별로 정렬하기
도출 및 확인하기
SUM - 전체에서 차지하는 비율이나 누적합을 구할 때 - 합계를 구하는 기능과 동일 - 누적합이 필요하거나 카테고리별 합계컬럼과 원본 컬럼을 함께 이용할 때 유용하게 사용 가능
- 예시 각 음식점의 주문건이 해당 음식 타입에서 차지하는 비율을 구한 후 주문 건이 낮은 순으로 정렬했을 때 누적 합 구하기
음식 타입별, 음식점별 주문 건수 집계하기
카테고리별 합, 카테고리별 누적합 구하기
도출 및 확인하기
<추가 학습> order_count가 동일한 값을 일괄로 더해 cum_sum으로 출력되는 문제 발생
- 원인 Window 함수를 사용할 때, SUM으로 동일한 cut_order 값을 가진 여러 행이 있을 경우 이 값을 한번에 더하는 현상 발생 - 해결 방법
1. ORDER BY 절에 cnt_order + 추가적인 열에 순서를 부여할 수 있는 restaurant_name을 작성 2. cut_order 값을 가진 행들이 명확하게 순서가 정해져 누적합이 정상적으로 처리됨 3. 누적합을 순서대로 표기하기 위해 order by에 cum_cusine을 추가
<날짜 데이터의 이해> - 날짜 데이터도 특정한 타입을 가지고 있음 - 년, 월, 일, 시, 분, 초 등의 값을 모두 갖고 있음 - 목적에 따라 월, 주, 일 등으로 포맷 변경 가능
날짜 데이터 예시
yyyy-mm-dd 형식의 컬럼을 date type으로 변경하기
date type을 date_format을 이용하여 년, 월, 일, 주로 조회해보기 - 년 → Y(4자리), y(2자리) - 월 → M, m - 일 → d, e - 요일 → w
조건 지정 주문건수 구하기 조건 지정 주문건수 구조
ex) 년도별 3월의 주문건수 구하기
년도, 월별 주문건수 구하기
3월 조건으로 지정하고 년도별로 정렬하기
도출 및 확인하기
3. 학습하며 겪었던 문제점 & 에러
1) 학습 과정에서 조회한 데이터가 상식적이지 않은 값을 가지고 있을 때 조건문을 통해 범위를 지정해야 한다는 내용을 접했다. 하지만 상식적인 수준의 범위를 어떻게 판단해야 하는지 어려움을 느꼈다. 이를 해결하기 위해 데이터가 의미하는 실제 값을 기준으로 적절한 범위를 설정하는 방법을 추가 학습했다. 그 결과 상식적인 범위란 현실적으로 발생 가능한 값의 범위를 의미하며, 이를 통해 오류 데이터를 걸러낼 수 있다는 점을 이해할 수 있었다. 2) 학습 과정에서 새로운 개념이 연속적으로 등장하다 보니 모든 내용을 완전히 이해하기보다는 기능과 사용 방법을 익히는 데 집중하게 되는 경우가 많았다. 특히 수업이 진행될수록 이러한 부분이 늘어나면서 개념을 명확하게 정리하는 데 어려움을 느꼈다. 이를 해결하기 위해 학습한 내용을 다시 정리하고 예제를 직접 실행해 보며 복습하는 시간을 가졌다. 그 결과 개념을 한 번에 이해하려 하기보다 반복적인 학습과 실습을 통해 익숙해지는 과정이 필요하다는 점을 느꼈다. 3) 학습 과정에서 새로운 내용을 학습할 때 한글로 설명된 예시를 보고 이전에 학습했던 내용과 같은 개념이라고 생각하는 경우가 있었다. 하지만 다시 살펴보니 문장이나 사용 방법에 미세한 차이가 있었고, 그 차이에 따라 사용되는 상황도 달랐다. 이를 해결하기 위해 각 개념의 역할과 사용 목적을 비교하며 학습했다. 그 결과 비슷해 보이는 내용이라도 세부적인 차이가 존재한다는 점을 이해할 수 있었고, 개념을 정확하게 구분하는 연습이 필요하다고 느꼈다.