728x90
프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
문제
ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해 주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
단, 시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요.
예시
예를 들어, ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A349996 | Cat | 2018-01-22 14:32:00 | Normal | Sugar | Neutered Male |
A350276 | Cat | 2017-08-13 13:50:00 | Normal | Jewel | Spayed Female |
A350375 | Cat | 2017-03-06 15:01:00 | Normal | Meo | Neutered Male |
A352555 | Dog | 2014-08-08 04:20:00 | Normal | Harley | Spayed Female |
A352713 | Cat | 2017-04-13 16:29:00 | Normal | Gia | Spayed Female |
SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID | NAME | 날짜 |
A349996 | Sugar | 2018-01-22 |
A350276 | Jewel | 2017-08-13 |
A350375 | Meo | 2017-03-06 |
A352555 | Harley | 2014-08-08 |
A352713 | Gia | 2017-04-13 |
본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.
정답
# 오라클 정답
select animal_id, name, to_char(datetime, 'RRRR-MM-DD') as 날짜
from animal_ins
order by animal_id;
# MySQL 정답
select animal_id, name, date_format(datetime, '%Y-%m-%d') as 날짜
from animal_ins
order by animal_id;
해설하기
# 1. SELECT절
출력하고자 하는 컬럼을 나열하는데,
datetime 컬럼의 값들을 시각(시-분-초)을 제외하고
날짜(년~월~일)만 출력해야 하기 때문에
아래와 같은 조치를 취해야한다.
▶ 오라클 해설
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. ORDER BY 절
출력된 결과를 ANIMAL_ID를 기준으로
ASC(오름차순) 정렬해 준다.
오름차순은 기본값이기 때문에 생략해 줘도 된다.
결과 출력
출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
반응형
'SQL 문제 풀기 > 1. 프로그래머스 SQL : 2023.12.17~2024.2.29' 카테고리의 다른 글
<프로그래머스 33> 카테고리 별 상품 개수 구하기(Lv.2) (0) | 2024.01.18 |
---|---|
<프로그래머스 32> 가격이 제일 비싼 식품의 정보 출력하기(Lv.2) (0) | 2024.01.17 |
<프로그래머스 30> NULL 처리하기(Lv.2) (2) | 2024.01.15 |
<프로그래머스 29> 이름에 EL이 들어가는 동물 찾기(Lv.2) (0) | 2024.01.14 |
<프로그래머스 28> 동명 동물 수 찾기(Lv.2) (4) | 2024.01.13 |