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

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

2022. 3. 9.

My SQL / sublime

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

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

programmers.co.kr

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.


풀이

제출한 오답 1

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME, DATE(B.DATETIME) - DATE(A.DATETIME) C
FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY C DESC

-> 여기서 LIMIT 2 구문을 사용하면 정답을 맞출 수는 있다. 요구하는 형식으로 출력하지 못해서 그렇지.. 상위 n개 구하기가 몇 번 나왔는데 연습이 많이 필요한 것 같다. 조건이 있으면 무조건 조건문을 써야겠다는 일차원적 생각도..???

다른 답 1

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2

질문하기에 공유된 방식. ORDER BY에 연산자를 사용하는 방법인데 직관적인 좋은 방법같다! 하지만 조금 아쉽다.. 좀 더 디벨롭 하고 싶다.

다른 답 2

-- 코드를 입력하세요
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY DATEDIFF(B.DATETIME, A.DATETIME) DESC
LIMIT 2;

-> DATEDIFF 함수를 사용하는 방식이다. 엑셀에서 DATEIF 함수와 동일한데 명칭이 조금 달라서 생소했다.

몰랐던 문법

DATEDIFF (일자 1, 일자 2)
->'일자 2 - 일자 1'의 차이를 리턴

2022.03.09

댓글