본문 바로가기
  • Coding & Book
프로그램및 언어/SQL

[SQL 코테] 조건에 맞는 도서 리스트 출력하기

by 루이3 2025. 3. 31.

문제 사이트

https://school.programmers.co.kr/learn/courses/30/lessons/144853

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

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

BOOK 테이블은 다음과 같으며 BOOK_ID, CATEGORY, AUTHOR_ID, PRICE, PUBLISHED_DATE는 각각 도서 ID, 카테고리, 저자 ID, 가격, 출판일을 의미합니다.

풀이

1. 조건에 맞는 데이터 필터링

조건절(WHERE)에서 출판 연도가 2021년이고 카테고리가 '인문'인 도서만 필터링합니다.

WHERE YEAR(PUBLISHED_DATE) = 2021 AND CATEGORY = '인문'

 

여기서 주의할 점은 날짜 조건 조회 시 YEAR(컬럼명) 함수를 사용하면 연도를 쉽게 조회할 수 있다는 것입니다.

처음에 like를 써서 통과가 되긴했지만 좀 더 찾아보고  YEAR(컬럼)을 사용하게 되었습니다.

  • YEAR(PUBLISHED_DATE) = 2021로 연도만 추출하여 정확히 해당 연도의 데이터만 조회할 수 있습니다.

2. 날짜 포맷 지정하기

출판일 포맷을 정확히 'YYYY-MM-DD' 형태로 출력해야 합니다. 이를 위해 DATE_FORMAT() 함수를 사용합니다.

DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
  • %Y: 네 자리 연도 (예: 2021)
  • %m: 두 자리 월 (예: 03)
  • %d: 두 자리 일 (예: 15)

여기서 대소문자 구분에 유의해야 할것 같습니다.

%Y(대문자)는 네 자리 연도를, %y(소문자)는 두 자리 연도를 출력합니다. (예: %y → 21)

전부 다 대문자인 경우

3. 결과 정렬하기

결과는 출판일 기준 오름차순으로 정렬합니다.

ORDER BY PUBLISHED_DATE ASC

 

최종 SQL 코드

SELECT
    BOOK_ID,
    DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d") AS PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE) = 2021 AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE ASC;

 

출력 결과 예시