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행만 뽑아내면 된다
[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;
'프로그래밍 > SQL' 카테고리의 다른 글
SQL 코딩테스트 복기 - JSON array에 들어있는 원소의 개수(JSON_LENGTH) (0) | 2024.04.27 |
---|---|
SQL 연습 - 비교연산자 = , if 조건문이 여러개일때.. case ~ when (0) | 2023.11.09 |
SQL 연습 - NULL값 체크하는 방법 (0) | 2023.09.27 |
SQL 연습 - 평균을 구하는 함수는 average가 아니고 avg- (0) | 2023.09.23 |
SQL 연습 - 시간 차이는 무조건 DATEDIFF, MYSQL의 if문- (0) | 2023.09.22 |