안녕하세요!! 오늘도 어김없이 등장!
오늘은 5월7일 수요일 QAQC_2기 사전캠프 5일차입니다!
다들 연휴는 잘 쉬고 오셨나요~? 저는 잘 쉬었습니다! 여행도 가고 잠도 푹 자고 맛있는 거 많이 먹고 힐링했어요 ㅋ.ㅋ
이제 다음주부터는 본캠프 시작이라 기대가 되기도 하고 잘 할 수 있을지 걱정도 되는데요..
오늘도 파이팅 해봅시다!
1. 조회한 데이터에 아무 값이 없다면 어떻게 해야할까?


방법 1) 없는 값을 제외해주기
MYSQL에서는 사용할 수 없는 값일 때 해당 값을 연산에서 제외해줍니다. → 0으로 간주
'Not given'이라고 뜨는 없는 값을 null값으로 아예 제외시켜주기 위해 쿼리를 작성합니다.

따라서, 명확하게 연산을 지정해주기 위해 null문법을 이용해봅시다.

방법 2) 다른 값을 대신 사용하기
사용할 수 없는 값 대신 다른 값을 대체해서 사용하는 방법입니다.
데이터 분석 시에는 평균값 or 중앙값 등 대표값을 이용하여 대체해주기도 합니다.
- 다른 값이 있을 때 조건문 이용하기 : if(rating>=1,rating,대체값)
- null 값일 때 : coalesce(age,대체값)

↘ coalesce(c.age,20) → customer 테이블 중에 age만 20으로 채워진다.
↘ where c.age is null → null값인 것만 보여준다.
2. 조회한 데이터가 상식적이지 않은 값을 가지고 있다면 어떻게 해야할까?
상식적이지 않은 데이터의 예시
1) 주문 고객의 나이가 2세, 6세 등 너무 어릴 경우
2) 결제일자가 비교적 최근 일자가 아닌 1973년과 같이 매우 과거의 날짜인 경우
- 조건문으로 값의 범위를 지정하기
조건문으로 가장 큰 값, 가장 작은 값의 범위를 지정해 줄 수 있습니다.
→ 상식적인 수준 안에서 범위를 지정해줍니다.
예시) 나이가 15세 미만인 경우는 모두 15세로, 나이가 80세 초과인 경우 모두 80세로 지정한다.

3. SQL로 Pivot Table 만들어보기
Pivot Table이란?
2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것
Pivot Table의 기본 구조

실습 1) 음식점별 시간별 주문건수 Pivot Table 뷰 만들기 (15~20시 사이, 20시 주문건수 기준 내림차순)
베이스 데이터
select f.restaurant_name,
substr(p.time,1,2) hh,
count(1) cnt_order
from food_orders f inner join payments p on f.order_id = p.order_id
where substr(p.time,1,2) between 15 and 20
group by 1, 2

실습 2) 성별, 연령별 주문건수 Pivot Table 뷰 만들기 (나이는 10~59세 사이, 연령 순으로 내림차순)
베이스 데이터
select p.gender,
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) cnt_order
from food_orders f inner join customers c on f.customer_id = c.customer_id
where p.age between 10 and 59
group by 1, 2

4. 업무 시작을 단축시켜 주는 마법의 문법 (Window Function - RANK, SUM)
1) Window Function 의 사례와 기본 구조
Window Function 은 각 행의 관계를 정의하기 위한 함수로 그룹 내의 연산을 쉽게 만들어줍니다.
쉽게 말해 행을 단위로 묶어 단위 안에서 연산을 쉽게 도와줍니다.
- window_function의 기본 구조
window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)
window_function : 기능명을 사용합니다. (sum, avg와 같이 기능명이 있음.)
(argument) : 함수에 따라 작성하거나 생략 가능합니다.
partition by : 그룹을 나누기 위한 기준입니다.
order by : window_function을 적용할 때 정렬할 컬럼 기준을 적어줍니다.
- Rank : 순위를 매겨주는 기능
실습 1) 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하기

실습 2) 전체에서 차지하는 비율, 누적합을 구할 때, Sum

5. 날짜 포맷과 조건까지 SQL 로 한 번에 끝내기 (포맷 함수)
날짜 데이터의 이해
- 문자타입, 숫자타입과 같이 날짜 데이터도 특정한 타입을 가지고 있습니다.
년, 월, 일, 시, 분, 초 등의 값을 모두 갖고 있으며 목적에 따라 ‘월’, ‘주’, ‘일’ 등으로 포맷을 변경할 수도 있습니다.
실습 1) 날짜 데이터의 여러 포맷
date type 을 date_format 을 이용하여 년, 월, 일, 주 로 조회해보기

실습 2)
년도, 월을 포함하여 데이터 가공하기
년도, 월별 주문건수 구하기
3월 조건으로 지정하고, 년도별로 정렬하기

벌써 SQL 5주차 강의까지 SQL 강의가 모두 끝이 났습니다!
역시 너무 어렵네요.. 그렇지만 굉장히 유용한 수업이었습니다!
아직까지 바로바로 사용하지 못하기 때문에 계속 복습하면서 반복학습을 해야할 것 같아요..
오늘도 힘들었지만 수고했고 다른 강의들이 더 기대가 됩니다! 파이팅~~~
'2025 내일배움캠프 QAQC_2기' 카테고리의 다른 글
| 2025 내일배움캠프 QAQC_2기 본캠프 1일차 (2) | 2025.05.12 |
|---|---|
| 2025 내일배움캠프 QAQC_2기 6일차 (0) | 2025.05.08 |
| 2025 내일배움캠프 QAQC_2기 4일차 (1) | 2025.05.02 |
| 2025 내일배움캠프 QAQC_2기 3일차 (0) | 2025.05.01 |
| 2025 내일배움캠프 QAQC_2기 2일차 (0) | 2025.04.30 |