<아티클 스터디>
'현재까지 진행한 데이터 분석과 관련된 아티클 중에서 이번이 가장 이해하고 정리하는 것이 제일 어려웠다...'
<오늘 배운 것 요약>
SQL 5주차
조회한 데이터에 아무 값이 없을때?
테이블에 잘못된 값이 들어있거나, 값이 없는 경우!
방법
1. 없는 값 제외해주기 (NULL값 제외)
Mysql - 사용할 수 없는 값 -> 해당 값 연산 제외 (0으로 간주)
기본 구조
Where 컬럼명 is not null
2. 다른 값 대신 사용하기
- 다른 값이 있을 때 조건문 이용하기
if(컬럼명>조건, 컬럼명, 대체값)
- null 값일 때
coalesce(컬럼명,대체값)
조회한 데이터가 상식적이지 않은 값을 가지고 있다면?
예) 음식 주문 고객은 20세 이상 성인이 많음 BUT, 데이터에서는 2세와 같이 이상한 값이 있음
예) 결제 일자 최근것 아니라 1970년대 ..?
방법: 조건문으로 값의 범위 지정하기
- 조건문으로 상식적 수준 안에서 가장 큰 값, 가장 작은 값 범위 지정
SQL로 Pivot Table 만들기
Pivot table?
2개 이상의 기준으로 데이터 집계 -> 보기 쉽게 배열하여 보여주는 것 의미
기본 구조
기본 구조 max()
select 첫 기준이 되는 행 컬럼명,
max() 조건1,) 조건2
max(
from
( - subquery
-
) a
group by 컬럼명
order by 정렬 기준
Window Function - RANK,SUM
Window Function??
그룹을 나누어 그룹 내 연산을 쉽게 만들어줌
=> 여러범늬 연산 대신 자체적으로 제공해주는 Window Function 이용
기본구조
Window_funcion(argument) over (partition by 그룹 기준 컬럼 order by 정렬기준)
sum,avg 같은 거 사용 가능 대신 over(~)는 무조건 작성!
이때 요일은 0(일요일)~6(토요일)
5주차 숙제
문제: 음식 타입별, 연령별 주문건수 pivot view 만들기 (연령은 10~59세 사이)
<지시사항>
select cuisine_type,
max(if(age=10, order_count, 0)) "10대",
max(if(age=20, order_count, 0)) "20대",
max(if(age=30, order_count, 0)) "30대",
max(if(age=40, order_count, 0)) "40대",
max(if(age=50, order_count, 0)) "50대"
from
(
select a.cuisine_type,
case when age between 10 and 19 then 10
when age between 20 and 29 then 20
when age between 30 and 39 then 30
when age between 40 and 49 then 40
when age between 50 and 59 then 50 end age,
count(1) order_count
from food_orders a inner join customers b on a.customer_id=b.customer_id
where age between 10 and 59
group by 1, 2
) t
group by 1