오늘도 어김없이 SQL코드테스트를 풀다가 막히는 부분이 있었다..
문제는 다음과 같았다.

나는 먼저 아래와 같은 코드를 짜보았다.
SELECT CASE WHEN DATETIME = MIN(DATETIME) THEN NAME
ELSE NULL
END 'NAME'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
이렇게 치니 아래와 같은 결과가 나왔다.

딸랑 이렇게 나온것이다😦
도무지 알 수가 없어 CHATGPT 선생님한테 물어보니 OVER절을 알려주셨다.
나는 왜 꼭 OVER가 들어가야하는지 물어보았다.

요약하자면 MIN(최소함수),MAX(최대함수) 등은 GROUP BY와 같이 그룹별로 쓰인다. GROUP BY 없이 쓴다면 개별그룹으로 인식하고 단일값을 생성한다.
그리하여 다른 그룹들고 비교하고 싶다면 'OVER()'을 넣어주기만 하면 된다.

그리하여 결국 답이 나왔다!
하지만... 정답이 아니란다ㅜㅜ 답은 똑같은데 계속 틀리다고 통과가 되지 않았다..
그리하여 다시 물어보았다

정답엔 거의 가까웠지만 효율적이지 않은 쿼리라고 말해주었다..ㅠ
'LIMIT'이라는 걸 쓰면 너무 효율적으로 해결이 되었다!!
나는 배워본 적이 없어서 몰랐다..
LIMIT으로 가져올 최대 행수를 지정해 줄 수 있었다.
기본 문법은 LIMIT;(가져올 행수) 이다.
같이 콤보로 쓰이는 것 중에 OFFSET이라는 것도 있었다.
OFFSET은 행수를 건너뛰고 시작하고 싶을 때 쓰인다. 예를 들어 테이블에서 10번 행을 건너뛰고 11번째의 행만 가져오고 싶다면 아래처럼 쓰면 된다
LIMIT 1 OFFSET10 ;
결국 LIMIT을 활용하여 간단하게 문제를 풀 수 있었다!
힘이 빠지긴 했지만 좋은거 알게되어 기쁘다😄