MySQL에서 중복된 데이터가 있는 테이블에서 ID를 기준으로 고유한(distinct) 값을 정렬하여 조회하려면 ORDER BY MAX()를 활용하면 됩니다. 이번 글에서는 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.81 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다. 여기서는 의도적으로 동일한 데이터를 중복해서 입력했습니다.
mysql> insert into DemoTable values(10,'John');
Query OK, 1 row affected (0.51 sec)
mysql> insert into DemoTable values(10,'John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(20,'Sam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(20,'Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(30,'David');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(30,'David');
Query OK, 1 row affected (0.11 sec)
3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+------+-------+
| Id | Name |
+------+-------+
| 10 | John |
| 10 | John |
| 20 | Sam |
| 20 | Sam |
| 30 | David |
| 30 | David |
+------+-------+
6 rows in set (0.00 sec)
위 결과처럼 각 이름이 두 번씩 중복되어 저장되어 있는 것을 확인할 수 있습니다.
4. ID 기준으로 고유한 값 정렬하여 조회하기
중복을 제거하고 ID의 최댓값을 기준으로 내림차순 정렬하려면 GROUP BY와 함께 ORDER BY MAX(Id) DESC를 사용합니다. 아래 쿼리는 고유한 이름을 ID 기준으로 정렬한 뒤 상위 2개만 가져오는 예제입니다.
mysql> select Name from DemoTable
-> group by Name
-> order by max(Id) DESC
-> limit 2;
출력 결과
+-------+
| Name |
+-------+
| David |
| Sam |
+-------+
2 rows in set (0.06 sec)
핵심 정리
GROUP BY로 이름별로 묶은 후, 각 그룹의 최대 ID 값을 기준으로 내림차순 정렬하면 원하는 결과를 얻을 수 있습니다. 이 방식은 중복 데이터가 있는 테이블에서 특정 컬럼의 고유한 값을 다른 컬럼 기준으로 정렬해야 할 때 유용하게 활용됩니다.