CS

[SQL풀이] 프로그래머스 - 조건에 맞는 도서 리스트 출력하기

뭉치v 2024. 7. 9.

프로그래머스 SQL 코딩 테스트 문제 풀이를 해보자.

지원 DBMS는 mysql, oracle 이므로 두가지 버전으로 작성해보겠다.

문제 : 조건에 맞는 도서 리스트 출력하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

더보기

문제 설명

문제설명(1)
문제설명(2)

 

문제 해설

  • 목표(이 문제를 풀면 아래 기능을 활용 할 수 있습니다.)
    • 특정 테이블에서 특정 조건을 걸어 데이터 가져오기
    • Mysql 또는 Oracle에서 DATE 타입 표현방법
    • 정렬하기
  • 풀이방법
    • 테이블 구조를 설명 해주고, 주어진 조건을 이용해 데이터를 추출하라고 나와있습니다.
    • 핵심은 2021년도에 속하는 데이터를 어떻게 가져올까인데, 두가지 방법이 있어보입니다.
      • 1) published_date 컬럼을 가공하기
        • mysql : `date_format(published_date,'%Y') = '2021'`
        • oracle : `TO_CHAR(published_date,'yyyy') = '2021'`
        • 이 방법은 published_date 컬럼에 인덱스가 생성되어있다면 인덱스 활용을 하지 못하기 때문에 선배에게 혼나는 작성 방법입니다.🙄 (인덱스 설명 : 준비중)
          인덱스에 대해 간략히 말씀드리면, 책의 목차와 같은 개념인데 전체 테이블을 확인하지 않고 컬럼 별로 Balanced Tree 형식으로 미리 만들어논 인덱스트리를 접근해, 전체 테이블 중 조건을 만족하는 일부 데이터만 확인하는 방법입니다.
      • 2) 날짜 상수를 가공하기
        • 보통 실무에서는 아래처럼 우변을 가공하여 사용합니다.
          • mysql : `PUBLISHED_DATE BETWEEN DATE('2021-01-01') AND DATE('2021-12-31')`
          • oracle : `PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01','yyyy-mm-dd') AND TO_DATE('2021-12-31','yyyy-mm-dd')`

 

MySQL 풀이 

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d')
FROM BOOK
WHERE PUBLISHED_DATE BETWEEN DATE('2021-01-01') AND DATE('2021-12-31')
AND CATEGORY ='인문'
ORDER BY PUBLISHED_DATE;

 

 

Oracle 풀이

SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE,'yyyy-mm-dd') as "PUBLISHED_DATE"
FROM BOOK
WHERE PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01','yyyy-mm-dd') AND TO_DATE('2021-12-31','yyyy-mm-dd')
AND CATEGORY ='인문'
ORDER BY PUBLISHED_DATE;

 

맺음말

문제 자체는 답을 내기는 쉽지만, mysql과 oracle에서의 date 포맷하는 방법과 조건절에 date형식을 어떻게 처리할 지에 대해 생각해 볼 수 있어서 재밌는 문제였습니다.

반응형

댓글

💲 추천 글