문제
이름이 중복된 데이터 중 각 이름별로 가장 작은 ID만 남기고 나머지를 삭제하려고 한다. DELETE 조건으로 가장 적절한 것은?
① WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME) ② WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY ID) ③ WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY NAME) ④ WHERE ID IN (SELECT MAX(ID) FROM T GROUP BY ID)
정답
1번
해설
정답: 1. 각 NAME 그룹별 MIN(ID)를 남기고 나머지를 삭제하려면 ID가 그룹별 MIN(ID)에 포함되지 않는 행을 삭제한다.
오답 풀이
- 1번: 이름별 최소 ID만 보존하는 조건이다.
- 2번: ID로 GROUP BY하면 각 ID 자체가 반환되어 중복 제거 목적에 맞지 않는다.
- 3번: 이름별 최대 ID를 남기는 조건이므로 문제 의도와 다르다.
- 4번: ID별 MAX(ID)는 사실상 모든 ID가 대상이 될 수 있어 부적절하다.
보충 개념 중복 데이터 삭제에서는 보존 기준을 먼저 정해야 한다. 보통 그룹별 MIN(ID) 또는 MAX(ID)를 남기고 나머지를 삭제한다.