카테고리 없음

내일배움캠프_QAQC_사전캠프 5일차 (SQL 3일차)

iron-min 2025. 8. 22. 18:58

1. 오늘 배운것

 1) 데이터가 없을 때의 없는 값 제외해주기

원본데이터를 보면 rating에 Not given 이라고 써있는 것을 볼수 있습니다.

저런 경우에 rating 컬럼을 합산 하거나 평균을 낼때 0으로 처리되어 추후 연산에 지장을 줄 수 있기에 때에따라 제거해 줘야 할 경우가 생기게 됩니다.

이런식으로 if 문을 통해 not given 이 아닐경우 rating, not given 일경우 Null로서 처리해주면 아래와 같이 값을 제외할 수 있습니다. (참고로 <> 표시는 ~가 아니다 라는뜻입니다)

추가로 주어지지 않는 값을 특정값으로 대체하고 싶을때는 저 null 대신 원하는 값을 넣으면 됩니다.

 

  2) 상식적이지 않는 값을 대체해주기

 

 

 

 

 

 

요런식으로 case 구문을 사용해

너무 낮거나 너무 높은 값들을

대체 해 줄수 있습니다.

 

  3) Pivot Table 만들어주기

  일단 피벗 테이블로 만들어줄 값들을 생각해봅니다.

 

 

 

 

 

 

컬럼으로 레스토랑 이름, 주문 시간(분, 초 제거), 주문건수를 생성한 것을 볼수 있습니다.

 

이제 시간별 테이블을 만들어주려면

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

max를 붙이고 if문을 이용해 시간별, 레스토랑별 컬럼을 만들어 줄 수 있습니다.

 

max를 붙이는 이유는 아직 이해하기 어려우니 나중에 알아보면 된다고 합니다.

일단 피벗테이블을 만들때 if 문 앞에 max를 붙인다는 것만 배웠습니다.

 

 

  4) 순위 매기기

 

위와 같이 select 부분에 rank함수를 넣어서 순위를 표시해줄수 있습니다.

partition by 는 어떤 컬럼으로 분류하고 order_count는 무엇으로 순위를 매길지 결정하는 것입니다.

 

위 코딩은 음식별 레스토랑 순위를 알 수 있습니다.

한국음식 1,2,3 순위 , 일본음식 1,2,3 순위 이런식으로 분류됩니다.

 

  5) 누적합 구하기

 

이건 좀 어려웠습니다.

일단 subquery를 보면 음식종류, 레스토랑명, 주문 횟수가 표시됩니다.

그리고 다시 음식종류별 주문수를 합계해준 코드입니다.

위에는 sum_cuisine 은 단순히 주문수를 합계해주었고

아래 cum_suisine은 누적 주문수가 어떻게 합계되는지 보여주는 코드입니다.

 

  6) 날짜 포맷과 조건 구하기

 

 

 

 

 

 

 

 

날짜는 원래 문자형식으로 표현되는데

이렇게 date_format을 이용하면 숫자 형식의 데이터를 뽑아낼수 있습니다.

추가로 '%년' 이런식으로 특정 년도별, 월별, 일별 로 데이터를 뽑아낼 수 있습니다.

 

 

 

2. 시도해본것

 [숙제] 음식타입별, 연령별 주문건수 pivot view 만들기

 이런식으로 코딩을 했었는데 딱히 어려운건 없었습니다.

 다만 아직 자신감이 없는지 코딩을 하면서 확신이 안생기더라구요.

 

아 오늘 사전 테스트 문제 몇개를 풀어봤는데

날짜 일부분의 대소비교를 어떻게 하는지 잘 몰랐습니다.

이게 문자로 인식이 될텐데 대소비교가 되는지 몰라서 해맸는데 아래와 같이 해결했습니다.

 

3. 해결방법

우선 첫번째로는 substr(hire_date,1,4)<2023 이런식으로 년도만 지워준다음

2023년 이전 값들만 불러올수 있게 했습니다.

근데 오늘 팀원들이랑 토의하면서 where hire_date<'2023-01-01'  이런식으로 대소비교도 되더군요

앞으로 후자의 방법을 써야겠습니다.

 

4. 무엇을 새롭게 알았는지

솔직히 위와같이 코딩에 대해서도 많이 배웠지만

조원들과 현업에 대해 알아볼수 있었던게 좋았습니다.

품질관리 분야 정보가 별로 없는데 현업에 종사하였던 분이 계셔서 많이 물어볼수 있어서 좋았습니다!