카테고리 없음

내일배움캠프 사전캠프 TIL/8일차 SQL 4,5주차 강의

study5024 2025. 1. 31. 16:21

4,5주차 시작

4주차는 서브쿼리, join을 중점으로 배우고

5주차는 null일 때 데이터를 다루는 not  null, coalesce 등 과 피벗 테이블 배운다

달리기반 풀면서 정리했던것들이 많이 나왔다

 

https://study5024.tistory.com/12

1. 서브쿼리

갠 적으로 sql 하면서 젤 많이 활용하는 것 같다

서브쿼리는 말 그대로 sql문안에 또 다른 sql문이 있는

 

>  예시

select order_id, restaurant_name, if(over_time>=0, over_time, 0) over_time
from 
(
select order_id, restaurant_name, food_preparation_time-25 over_time
from food_orders
) a

 

 

2. join

이것도 많이 사용하는 친구로 알아두면 좋다

형식은  select ... from A JOIN B on A.컬럼 = B.컬럼 이런식으로 주로 사용

 

> 예시

select u.user_id,u.email from users u left join point_users pu 
on pu.user_id = u.user_id;

 

4주차 마무리 숙제

> case로 나눠주면 간단히 해결된다

select f.restaurant_name,
case when avg(f.price) <= 5000 then 'price_group1'
	 when avg(f.price) between  5000 and 10000 then 'price_group2'
	 when avg(f.price) between  10001 and 30000 then 'price_group3'
	 when avg(f.price) > 30000   then 'price_group4'
	 end 'price_group',
case when avg(c.age) <= 29 then 'age_group1'
     when avg(c.age) between 30 and 39 then 'age_group2'
     when avg(c.age) between 40 and 49 then 'age_group3'
     when avg(c.age) >= 50 then 'age_group4'
     end 'age_group'
from food_orders f inner join customers c 
on f.customer_id = c.customer_id 
group by f.restaurant_name
order by f.restaurant_name;

 

 

5주차 

데이터가 null일 때 다루는 법,

 

1. coalesce

> 형식 coalesce(대상 컬럼 , 대체 값) 대상 컬럼 값이 null일 떄 대체 값을 지정해서 넣어준다

"COALESCE" 는 if null 과 같은 역할을 하지만 차이점으로 COALESCE는  인수를 여러개 더 받을 수 있다

 

ex)

select
       coalesce(age, 20) "null 제거",
from customers

 

2. 피벗테이블

  • Pivot table 이란? : 2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것을 의미합니다
  • Pivot table 의 기본 구조

 

ex)

tip 만들때 max( )사용

3. row_number( )

select된 결과 값에 순서를 넣어줄수있다 , 그리고 PARTITION BY 이용해서 원하는 그룹별로 묶어서 보여주기도 가능

 

row_number() over(order by id desc)

 

>  PARTITION BY

 

PARTITION BY 형식은  SUM() OVER (PARTITION BY 컬럼명),  ROW_NUMBER( PARTITION BY 컬럼명 ORDER BY 컬럼명)

 

이런식으로 사용 가능 GROUP BY와 다르게 데이터를 집약시키지 않고 보여줌

SUM() OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명 ) 이렇게 사용하면 누적 합 출력가

4. Date( ), Date_format( )

 

Date()는 문자열을 날짜 형식으로 바꿔줌

 

Date_format()은 날짜데이터를 원하는 형식으로 가공가능

 

5주차 마무리 숙제

 

>

1. sql 기본구조

select f.cuisine_type , c.age ,count(*)
from food_orders f inner join customers c  
on f.customer_id = c.customer_id
where c.age between 10 and 59 
group by 1,2

2.피버테이블 

select cuisine_type,
max(if(age between 10 and 19,age,0))'10대',
max(if(age between 20 and 29,age,0))'20대',
max(if(age between 30 and 39,age,0))'30대',
max(if(age between 40 and 49,age,0))'40대',
max(if(age between 50 and 59,age,0))'50대'
from
(
select f.cuisine_type , c.age ,count(*)
from food_orders f inner join customers c  
on f.customer_id = c.customer_id
where c.age between 10 and 59 
group by 1,2
)a
group by 1
;