[TIL] SQL 4주차

최하온·2023년 12월 27일
0

TIL

목록 보기
7/71
post-thumbnail

What I learned new


SQL 4주차

subquery

:하나의 SQL 안에 또 다른 SQL문을 말함. 메인쿼리-서브쿼리 종속 관계

여러번의 연산을 한번에 수행 할 때, 조건문에 연산 결과를 사용해야 할 때, 조건에 query 결과를 사용하고 싶을 때 사용

select column1, column2
from table1
where column1 = (select col1 from table2)
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

가장 가운데 가로 (안에 있는 가로), 특정 구문만 보고 싶으면 드래그 후 실행 누르기

join

: 서로 다른 테이블의 데이터를 가져와 엮기

LEFT JOIN

select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

INNER JOIN

select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

Issue occuring


What I tried


우선 어떻게 할지 구성을 생각하기.

엑조디아 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ... 우선 한 문장 문장은 잘 돌아간다. 이걸 어떻게 할 지 고민해보자.. 오늘은 너무 어려워서 거진 한 시간을 붙들고 있었고 씨름하던 중 힌트와 결과를 봐가면서 짰다.

우선 너무 지저분하니 케이스 문끼리 엮어주었고,
age와 price는 각기 다른 테이블에 속해있으니까 join으로 엮어주었다.

하지만 restaurant_name이 알 수 없는 column이라고 나온다. 그래서 과감히 날려버렸다.

우선 여기까지는 코드에 이상이 없는 것을 확인했다.
알 수 없는 컬럼이라고 뜨니까 어딘가에 선언해주면 될 거 같은데 어디인지 감을 못 잡겠다.

그리고 왜 age_group price_group는 정상으로 작동이 되는거지?

How solve issue


잠깐. age_groupprice_group는 정상 작동을 하는 이유는?
=>b에서 선언을 해줘서.

그럼 restaurant_name도 b서브쿼리 안에 선언해보면?

정상 작동!

메인쿼리에선 서브쿼리의 결과만을 보는데 선언을 안 해주어 restaurant_name은 인식도 못하던 것이었다.

FM 정답

select restaurant_name,
       case when price <=5000 then 'price_group1'
            when price >5000 and price <=10000 then 'price_group2'
            when price >10000 and price <=30000 then 'price_group3'
            when price >30000 then 'price_group4' end price_group,
       case when age <30 then 'age_group1'
            when age between 31 and 39 then 'age_group2'
            when age between 40 and 49 then 'age_group3'
            else 'age_group4' end age_group
from
(
select a.restaurant_name,
       avg(price) price,
       avg(age) age
from food_orders a inner join customers b on a.customer_id=b.customer_id
group by 1
) t
order by 1

글을 올리면서 발견했는데 내 정답은 restaurant_name에 중복이 있다.
그룹으로 안 묶어준게 차이 인 거 같아 다시 묶어주고 정말 끝!

Realization


오늘은 나의 무능함을 깨닫는 하루였다...

내일은 5주차 수업 마무리하고, 부족한 부분 전체적으로 배속으로 듣자

0개의 댓글