My SQL / sublime
문제: 상위 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 별칭을 왜 사용하신건지 모르겠다.. 일단 나는 괄호안에 별칭을 사용하지 않았다.
'데이터 분석 > SQL 연습문제' 카테고리의 다른 글
코테 연습 9일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.12 |
---|---|
코테 연습 8일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.11 |
코테 연습 6일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.09 |
코테 연습 5일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.08 |
코테 연습 4일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.07 |
댓글