학습용 기출·복원자료 분류 확인SQLD · 2024년 54회 SQL 기본 및 활용 · 37번
이름별 최소 ID 행만 남기고 나머지를 삭제하는 조건은?
1
WHERE ID IN (SELECT MIN(ID) FROM T GROUP BY NAME)
오답 이유보존해야 할 최소 ID 행을 오히려 삭제한다. 따라서 1번 보기 ‘WHERE ID IN (SELECT MIN(ID) FROM T GROUP BY NAME)’의 적용 여부를 문제 조건과 대조해야 한다.
2
WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY NAME)
오답 이유이름별 최대 ID를 남기는 동작이라 요구사항과 반대다. 따라서 2번 보기 ‘WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY NAME)’의 적용 여부를 문제 조건과 대조해야 한다.
3
WHERE NAME NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)
오답 이유문자 이름을 숫자 ID 목록과 비교해 열과 자료형이 맞지 않는다. 따라서 3번 보기 ‘WHERE NAME NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)’의 적용 여부를 문제 조건과 대조해야 한다.
4
WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)
정답 근거서브쿼리는 이름별 보존할 최소 ID를 반환한다. 바깥 DELETE는 그 목록에 없는 ID만 제거한다. 따라서 4번 보기 ‘WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)’의 적용 여부를 문제 조건과 대조해야 한다.
ANSWER & EXPLANATION
정답 4번
핵심 판단은 4번 ‘WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)’입니다. 서브쿼리는 이름별 보존할 최소 ID를 반환한다. 바깥 DELETE는 그 목록에 없는 ID만 제거한다.