조회한 데이터 값이 없을 때 대처법
테이블에 잘못된 값이 있거나, JOIN을 했을 때 null값 일 때 해결하는 방법에 대해 알아봤다.
방법에는 크게 두 가지가 있다. 첫 번째는 없는 값을 제외하자이다. SQL에서는 사용할 수 없는 값은 0으로 바꾸고 연산에서 제외시킨다. Where절에서 is null, is not null 로도 null값인 데이터를 걸러낼 수 있다. 두 번째는 다른 값을 대신 사용하는 것이다. if문을 사용하자.
조회한 데이터가 상식적이지 않은 값을 가지고 있을 때
먼저 상식적이지 않은 데이터란 음식 주문을 한 고객의 나이가 2살일 때, 주문일자가 1960년도 일 때이다. 이를 해결하는 방법은 쉽다. Where절에서 조건을 지정해 주자.
피벗 테이블
피벗 테이블이란 두 개 이상의 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 테이블이다.
이해하기 힘들었는데, 실습 예제를 몇 개 해보니 얼추 이해됐다.
음식점별 시간별 주문건수((15시 ~ 20시 사이, 20시 주문 건수 기준 내림차순) pivot table을 만들어보자.
먼저 음식점별, 시간별 주문 건수(15시 ~ 20시 사이) 쿼리를 만들어보자
select restaurant_name, SUBSTRING(b.time, 1, 2) as pay_time, COUNT(1) cnt_order
from food_orders a inner join payments b on a.order_id = b.order_id
where SUBSTRING(b.time, 1, 2) between 15 and 20
group by 1, 2
그다음 이 쿼리를 가지고 피벗 테이블을 마저 만들어보자.
select restaurant_name, max(if(pay_time = '15', cnt_order, 0)) "15",
max(if(pay_time = '16', cnt_order, 0)) "16",
max(if(pay_time = '17', cnt_order, 0)) "17",
max(if(pay_time = '18', cnt_order, 0)) "18",
max(if(pay_time = '19', cnt_order, 0)) "19",
max(if(pay_time = '20', cnt_order, 0)) "20"
from (select restaurant_name, SUBSTRING(b.time, 1, 2) as pay_time, COUNT(1) cnt_order
from food_orders a inner join payments b on a.order_id = b.order_id
where SUBSTRING(b.time, 1, 2) between 15 and 20
group by 1, 2) temp
group by 1
order by 7 desc
업무 시작을 단축시켜 줄 함수들
window function 은 각 행의 관계를 정의하기 위한 함수로 그룹 내의 연산을 쉽게 만들어준다.
기본 구조는 다음과 같다.
window_function(argument) over (partition by 컬럼명 order by 컬럼명)
window_function: 함수이름을 넣어준다. (sum, rank ...)
argument: 함수에 필요한 인자들을 넣어준다. 생략 가능
partition by: group by와 유사
order by: 정렬 기준 컬럼을 넣어준다.
주문량에 따른 음식점 랭킹을 구해보자.
select restaurant_name, rank() over(order by cnt_order desc) ranking, cnt_order
from (select restaurant_name, count(*) as cnt_order
from food_orders
group by 1
order by cnt_order desc) a
마무리
부트캠프에서 제공해 준 SQL 기본 강의를 끝냈다. 어려운 것도 었었지만 아직 까지는 난이도가 많이 어렵지 않은 것 같아서 할 만했다.
이제 알고리즘 공부를 하며 본 캠프를 기다리고 있다. 빨리 본 캠프로 넘어가서 코딩을 하고 싶다.
'부트캠프 > DB' 카테고리의 다른 글
부트캠프 SQL 강의 5일차 (0) | 2024.07.04 |
---|---|
부트캠프 SQL 강의 4일차 (0) | 2024.07.03 |
부트캠프 SQL 강의 3일차 (0) | 2024.07.01 |
부트캠프 SQL 강의 2일차 (0) | 2024.06.28 |
부트캠프 SQL 강의 1일차 (0) | 2024.06.26 |