SQL 연습 - 통계함수 사용할때 주의할 점, limit로 지정한 수 만큼 행 추출

1. 문제

 

코딩테스트 연습 - 상위 n개 레코드 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 풀이

 

DATETIME이 최소가 될때, NAME을 출력하면 되는데

 

SELECT NAME,MIN(DATETIME) FROM ANIMAL_INS;

 

이렇게 해가지고, 여기서 NAME만 뽑아오면 되는거 아니냐?

 

SELECT NAME FROM (SELECT NAME,MIN(DATETIME) FROM ANIMAL_INS) A;

 

근데 이러면 오답이더라고...

 

왜 그런지 분석을 해봤는데..

 

SELECT NAME,DATETIME FROM ANIMAL_INS;만 해보면.. 다음과 같이 나오는데..

Sugar 2018-01-22 14:32:00
Jewel 2017-08-13 13:50:00
Meo 2017-03-06 15:01:00
Harley 2014-08-08 04:20:00
Gia 2017-04-13 16:29:00

 

 

이게 여기서 SELECT NAME, MIN(DATETIME) FROM ANIMAL_INS;를 하면...

 

위 결과의 맨 첫줄인 'SUGAR 2018-01-22 14:32:00'을 가져온 다음...

 

DATETIME 부분만 MIN(DATETIME) 값으로 바꾸더라고?

 

Sugar 2013-10-14 15:38:00

 

실제로는 DATETIME을 기준으로 정렬해보면... 이름이 JACK이 나와야돼

Jack 2013-10-14 15:38:00
Disciple 2013-10-23 11:42:00
Katie 2013-11-03 15:04:00
Anna 2013-11-18 17:03:00
Skips 2013-11-20 13:09:00

 

그래서 다음과 같이 MIN(DATETIME) 값만 뽑아내고,

 

WHERE절을 이용해서 ANIMAL_INS.DATETIME이 MIN값과 같은 행의 NAME을 추출한다

 

SELECT NAME FROM ANIMAL_INS
WHERE ANIMAL_INS.DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS);

 

혹은 위 처럼 DATETIME으로 정렬하고, 1행만 뽑아내면 된다

 

https://nolran.tistory.com/57

 

[MySQL] Limit 사용법

//아래 예는 5개 가져오기 SELECT * FROM [TABLE NAME] LIMIT 5; // LIMIT 시작점, 갯수 (아래 예의 경우 5번째부터 10개 추출. 첫번째 파라미터는 0 부터 시작함!) SELECT * FROM [TABLE NAME] LIMIT 4, 10;

nolran.tistory.com

 

MYSQL에서는 limit를 이용해서 행 수를 제한할 수 있다.

 

SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
limit 1;

 

TAGS.

Comments