본문 바로가기
DB/문제풀이

[프로그래머스] 상위 n개 레코드 -LV.1

by 쬑께께 2022. 12. 14.

상위 n개 레코드의 문제는 다음과 같다.

 

 

이 문제를 풀기 위해서는

1. 동물의 이름을 출력

2. 가장 먼저 들어온 동물을 출력

의 순서를 거쳐야 한다.

 

 

이 문제를 풀기 위한 방법으로

지금 당장 생각나는건 2가지 정도이다.

하나는 LIMIT 명령어를 통해 1가지의 결과만 반환하는 것이고

또 다른 하나는 서브쿼리를 이용하는 방법이다.

 

그럼 우선 LIMIT 명령어를 통해 풀어보도록 하겠다.

 

 

(1) LIMIT 명령어 사용

우선 SELECT문을 통해 이름을 가져오는 쿼리문을 작성하고

 

 

보호 시작일을 기준으로

가장 먼저 들어온 동물이 출력되게끔

정렬해보겠다.

 

 

이제 여기다가 상위 레코드 하나만 출력되게끔

LIMIT 명령어를 통해 제약을 걸어보겠다.

 

출력되는 결과를 보면 

LIMIT명령어를 통해

명령한대로 하나의 레코드만을

반환하는 것을 확인할 수 있다.

 

 

(2) 서브쿼리 사용

그렇다면 이번엔 서브쿼리를 사용하여 문제를 풀어보겠다.

이 경우 위의 LIMIT명령어와 달리

쿼리문이 조금 복잡해보일 수 있다.

 

 

우선 위와 같이 이름을 출력하는 쿼리문을 작성하고 시작하겠다.

 

 

이제 ANIMAL_INS의 테이블에서 NAME을 가져왔으니 

보호 시작일을 기준으로 정렬된

상위의 값 1개만을 가져오는 서브쿼리를 조건을 걸어보겠다.

 

서브쿼리 작성 순서는 다음과 같다.

1. DATETIME을 가져온다

2. DATETIME 중 가장 작은 최솟갑을 가져온다.

 

 

우선 DATETIME을 가져오기 위해 

SELECT문을 사용하겠다.

 

이제 여기서 MIN() 함수를 사용하여

보호 시작일을 기준으로 

최솟값만을 가져와보겠다. 

 

이제 이 쿼리문을 본 쿼리문에 붙여보겠다.

 

 

지금 내가 조건을 걸고자 하는 곳은 보호 시작일이며,

조건을 걸기 위해선 WHERE절이 필요하다.

이를 쿼리문으로 바꾸면 다음과 같이 된다.

 

 

그리고 이 쿼리문을 실행시켜보면

위의 첫번째 방법과 같이

하나의 레코드만이 출력되는 것을 확인할 수 있다.

 

 

이제 이 쿼리문도 정답으로 쳐 주는지 확인해보겠다.

정답이다.