본문 바로가기
데이터 분석/SQL 연습문제

코테 연습 7일차 (프로그래머스 SQL 고득점 Kit)

2022. 2. 10.

My SQL / sublime

 

코딩테스트 연습 - 상위 n개 레코드

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제: 상위 n개 레코드

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의 적용을 받습니다.


풀이

잠깐 멈칫했는데 이전에 다른 사람들이 잘못 작성한 코드(4줄만 출력하는줄 알고 LIMIT 적용했던)가 기억나서 해보았다.

제출한 답

-- 코드를 입력하세요
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

다른 방법은 없을까?


다른 답 1

-- 코드를 입력하세요
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS);

-> 서브쿼리를 활용하는 방법. 나도 DATETIME을 기준으로 한 MIN 조건이 가장 먼저 생각나기도 했고 직관적이어서 많이 활용할 수 있는 방법이다.

다른 답 2

-- 코드를 입력하세요
SELECT NAME
FROM (SELECT MIN(DATETIME) DT FROM ANIMAL_INS) A, ANIMAL_INS B
WHERE A.DT = B.DATETIME;

-> 셀프 조인하는 방법. 사원 테이블 내에서 상위 관리자를 찾아 매칭하는 문제에서 사용하는 문법이다. 동일한 테이블이므로 별칭 꼭 써줘야함!

Q&A에 공유된 풀이를 참고하였다. 근데 작성자분이 괄호안에 ANIMAL_INS A 별칭을 왜 사용하신건지 모르겠다.. 일단 나는 괄호안에 별칭을 사용하지 않았다.

2022.02.10

댓글