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
반응형
'SQL 문제 풀기 > 1. 프로그래머스 SQL : 2023.12.17~2024.2.29' 카테고리의 다른 글
<프로그래머스 16> 12세 이하인 여자 환자 목록 출력하기(Lv.1) (0) | 2024.01.01 |
---|---|
<프로그래머스 15> 모든 레코드 조회하기(Lv.1) (2) | 2023.12.31 |
<프로그래머스 13> 흉부외과 또는 일반외과 의사 목록 출력하기(Lv.1) (0) | 2023.12.29 |
<프로그래머스 12> 이름이 없는 동물의 아이디(Lv.1) (2) | 2023.12.28 |
<프로그래머스 11> 조건에 맞는 회원수 구하기(Lv.1) (0) | 2023.12.27 |