본문 바로가기
코딩테스트 sql/3단계

3단계(1)

by 세용용용용 2023. 11. 27.

sql쿼리 각 절의 우선 순위

from >>> where >>> select >>> order by >>> group by >>> having >>> limit(이절은 order by 이후 실행)

 

1. 오랜 기간 보호한 동물

ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물 정보

 

ANIMAL_OUT : 동물 보호소에 입양 보낸 동물의 정보

 

문제 :  아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회

 

나의 쿼리

SELECT NAME, DATETIME # 컬럼 선택
from ANIMAL_INS # 데이터 불러오기
where ANIMAL_ID not in (select ANIMAL_ID from ANIMAL_OUTS) # 아직 입양 안된 동물 필터
order by DATETIME # 입양일 순 오름차순
limit 3 # 맨 앞의 3개의 데이터만 제한

 

 

2. 카테고리 별 도서 판매량 집계하기

BOOK 테이블 : 판매중인 도서 정보

 

BOOK_SALES : 판매 정보 테이블

 

문제 :  2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 카테고리명을 기준으로 오름차순 정렬

 

나의 쿼리

select b.CATEGORY, sum(a.SALES) as TOTAL_SALES from # 컬럼 선택
(select book_id, SALES # 2022년 1월 도서 판매 정보
from BOOK_SALES 
where date_format(SALES_DATE,'%Y-%m') = '2022-01'
) a
left join
(select BOOK_ID, CATEGORY # 도서 카테고리 정보
from BOOK) b
on a.BOOK_ID = b.BOOK_ID # 책 id로 조인
group by b.CATEGORY # 카테고리로 묶어주기
order by CATEGORY # 카테고리명 오름차순

 

 

3. 있었는데요 없었습니다

ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물 정보

 

ANIMAL_OUT : 동물 보호소에 입양 보낸 동물의 정보

 

문제 :  보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회

 

나의 쿼리

select a.ANIMAL_ID, a.NAME # 컬럼 선택
from
(select ANIMAL_ID, NAME, DATETIME # 동물 정보 데이블
from ANIMAL_INS) a
right join # 입양 테이블 기준 조인
(select ANIMAL_ID, DATETIME # 동물 입양 테이블
from ANIMAL_OUTS) b
on a.ANIMAL_ID = b.ANIMAL_ID 
where b.DATETIME < a.DATETIME # 입양일이 보호 시작일보다 빠른 데이터 필터
order by a.DATETIME # 보호 시작일 기준 오름차순

 

 

4. 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물 정보

 

ANIMAL_OUT : 동물 보호소에 입양 보낸 동물의 정보

 

문제 :  입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회

 

나의 쿼리

SELECT a.ANIMAL_ID, a.NAME # 컬럼 선택
from
(select ANIMAL_ID, NAME, DATETIME # 동물 보호소에 들어온 동물 정보
from ANIMAL_INS) a
right join # 입양간 동물 정보 기준 조인
(select ANIMAL_ID, DATETIME # 입양간 동물 정보
from ANIMAL_OUTS) b
on a.ANIMAL_ID = b.ANIMAL_ID
where a.ANIMAL_ID is not null # 동물 보호소에 들어온 id가 널 이 아닌 값 필터
order by datediff(b.DATETIME, a.DATETIME) desc # 보호 기간 순 내림차순
limit 2 # 맨 앞의 2개 데이터 가져오기

 

 

5. 조건별로 분류하여 주문 상태 출력하기

FOOD_ORDER 테이블 : 식품공장 주문정보

 

문제 :  5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬

 

나의 쿼리

SELECT ORDER_ID, PRODUCT_ID, date_format(OUT_DATE,'%Y-%m-%d') as OUT_DATE, # 컬럼 선택
case # 2022년 5월 1일 기준 출고 정보 컬럼
    when date_format(OUT_DATE, '%Y-%m-%d') <= '2022-05-01' then '출고완료'
    when OUT_DATE is null then '출고미정'
    else '출고대기'
end as 출고여부
from FOOD_ORDER # 데이터 불러오기
order by ORDER_ID # 주문id 오름차순

'코딩테스트 sql > 3단계' 카테고리의 다른 글

3단계(3)  (0) 2023.12.06
3단계(2)  (2) 2023.12.05