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 |
문제
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A399552 | Dog | 2013-10-14 15:38:00 | Normal | Jack | Neutered Male |
A379998 | Dog | 2013-10-23 11:42:00 | Normal | Disciple | Intact Male |
A370852 | Dog | 2013-11-03 15:04:00 | Normal | Katie | Spayed Female |
A403564 | Dog | 2013-11-18 17:03:00 | Normal | Anna | Spayed Female |
이 중 가장 보호소에 먼저 들어온 동물은 Jack입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
NAME |
JACK |
※ 보호소에 가장 먼저 들어온 동물은 한 마리인 경우만 테스트 케이스로 주어집니다.
본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.
정답
select name
from ( select row_number() over (order by datetime) 순위,
name
from animal_ins )
where 순위 = 1;
해설해보기
1. SELECT 절 : 이름을 출력하는 것이기 때문에 name 컬럼 작성
2. FROM 절
- SELECT 절에서 넘버링을 하게 되면, ORDER BY 로 정렬시 번호가 뒤섞이게 됨
- 따라서 IN LINE VIEW를 사용하여 순위를 추출
- 순위 추출시 데이터 분석 함수 ROW_NUMBER () 를 사용
- 보호소에 가장 먼저 들어왔다는 것은,
DATETIME 이 ASCENDING하게 정렬 된 것 중 맨 처음 오는 것을 의미
- ROW_NUMBER() : select row_number() over (order by [정렬 기준 컬럼명] )
3. WHERE절
- IN LINE VIEW에서 사용된 별칭을 사용해서 순위가 1위인 컬럼을 추출 할 수 있음
결과 출력
출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
반응형
'SQL 문제 풀기 > 1. 프로그래머스 SQL : 2023.12.17~2024.2.29' 카테고리의 다른 글
<프로그래머스 12> 이름이 없는 동물의 아이디(Lv.1) (2) | 2023.12.28 |
---|---|
<프로그래머스 11> 조건에 맞는 회원수 구하기(Lv.1) (0) | 2023.12.27 |
<프로그래머스 9> 어린 동물 찾기(Lv.1) (2) | 2023.12.25 |
<프로그래머스 8> 역순 정렬하기(Lv.1) (0) | 2023.12.24 |
<프로그래머스 7> 아픈 동물 찾기(Lv.1) (0) | 2023.12.23 |