본문 바로가기
SQL 문제 풀기/1. 프로그래머스 SQL : 2023.12.17~2024.2.29

<프로그래머스 14> 조건에 맞는 도서 리스트 출력하기(Lv.1)

by HYEHYE_SON 2023. 12. 30.
728x90

 

프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지


 

문제 설명

다음은 어느 한 서점에서 판매 중인 도서들의 도서 정보(BOOK) 테이블입니다.
BOOK
테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

 

Column name Type Nullable Description
BOOK_ID INTEGER FALSE 도서 ID
CATEGORY VARCHAR(N) FALSE 카테고리 (경제, 인문, 소설, 생활, 기술)
AUTHOR_ID INTEGER FALSE 저자 ID
PRICE INTEGER FALSE 판매가 (원)
PUBLISHED_DATE DATE FALSE 출판일

 


문제

BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해 주세요.

예시

예를 들어 BOOK 테이블이 다음과 같다면

BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 인문 1 10000 2020-01-01
2 경제 2 9000 2021-02-05
3 인문 2 11000 2021-04-11
4 인문 3 10000 2021-03-15
5 생활 1 12000 2021-01-10

 

조건에 속하는 도서는 도서 ID 가 3, 4인 도서이므로 다음과 같습니다.

BOOK_ID PUBLISHED_DATE
3 2021-04-11
4 2021-03-15

 

그리고 출판일 오름차순으로 정렬하여야 하므로 다음과 같은 결과가 나와야 합니다.

BOOK_ID PUBLISHED_DATE
4 2021-03-15
3 2021-04-11

주의사항

PUBLISHED_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.


정답

# 오라클 정답

select book_id, to_char(published_date, 'rrrr-mm-dd') as published_date
    from  book
    where to_char(published_date, 'rrrr') = '2021'
    	and category = '인문'
    order by published_date;
    
 -------------------------------------------------------
 
 # MySQL 정답
 
 select book_id, date_format(published_date, '%Y-%m-%d') as published_date
    from  book
    where to_char(published_date, 'rrrr') = '2021'
    	and category = '인문'
    order by published_date;

 

 

해설해 보기

# 1. SELECT 절
출력하고자 하는 컬럼명들 순서대로 나열
단, Date Format이 예시와 동일하기 위해서는
 PUBLISHED_DATE  컬럼 포맷의 변경이 필요하다
( 왜? date는 기본 출력 형식이 '년 월 일 시:분:초' 이기 때문에
  시:분:초를 출력하지 않기 위해서 PUBLISHED_DATE 컬럼의 형식을 변경해야 함 )

  ▶ 오라클 해설
TO_CHAR([컬럼명], '변경할 데이터 형태')
위의 함수를 사용해서 날짜형 -> 문자형으로 변경한다

*표시한 형태 해석(대소문자 구분 없음)
- RRRR/YYYY : Year 연도 4자리로 표기(ex. 2023, 2024)
- MM : Month 월 2자리로 표기 (ex. 05, 07)
- DD : Day 일 2자리로 표기 (ex. 01, 31)


▶ MySQL 해설
날짜형식의 포맷을 지정해주는
DATE_FORMATE() 함수를 이용한다.

*표시한 형태 해석(대소문자 구분 있음)
- %Y : Year 연도를 4자리로 표기 (ex. 2023, 2024)
- %m : Month 월을 2자리로 표기(ex. 05, 12)
- %d : Day 일을 두자리로 표기(ex. 04, 28)

*참고
- %c :Month 월을 한 자리로 표기(ex. 5, 12)
- %e :Day 일을 한자리로 표기(ex. 4, 28)


# 2. FROM 절
값을 가져올 테이블 명 지정


#3. WHERE절

 ▶ 오라클 해설
출판일이 2021년 도라는 조건을 충족시키기 위해서
TO_CHAR()를 이용해 연도를 추출한다.
이때 문자열 비교이기 때문에 싱글쿼테이션마크(')로 둘러준다

▶ MySQL 해설
출판일이 2021년 도라는 조건을 충족시키기 위해서
DATE_FORMATE() 함수 를 이용해 연도를 추출한다.
이때 문자열 비교이기 때문에 싱글쿼테이션마크(')로 둘러준다

< 오라클 MySQL 공통 >
추가적으로 2021년도이면서, CATEGORY = '인문' 이어야 하므로
AND 연산자로 연결해 주고,
인문도 문자열이기 때문에 싱글쿼테이션마크(')로 둘러준다.


#4. ORDER BY 절
출판일을 기준으로 오름차순 정렬이기 때문에
PUBLISHED_DATE asc이지만 
기본값이 asc이기 때문에 생략하였다.

 

결과 출력

 

출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

반응형