Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 고유 ID만 조회하는 방법 – GROUP BY 활용법

MySQL에서 고유 ID를 가진 전체 레코드 조회하기

MySQL에서 중복된 ID 값이 존재할 때, 각 ID별로 하나의 레코드만 조회하고 싶다면 GROUP BY 절을 활용하면 됩니다. 기본 문법은 다음과 같습니다.

SELECT * FROM 테이블명 GROUP BY 컬럼명;

예제 테이블 생성

문법을 실제로 이해하기 위해 간단한 테이블을 만들어 보겠습니다.

mysql> create table DistinctIdDemo
    -> (
    -> Id int,
    -> Name varchar(20),
    -> Age int
    -> );
Query OK, 0 rows affected (1.03 sec)

중복된 ID 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다. 이때 의도적으로 ID에 중복 값을 넣었습니다.

mysql> insert into DistinctIdDemo values(1,'Mike',23);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DistinctIdDemo values(2,'Sam',24);
Query OK, 1 row affected (0.20 sec)

mysql> insert into DistinctIdDemo values(1,'Carol',23);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DistinctIdDemo values(1,'John',28);
Query OK, 1 row affected (0.33 sec)

mysql> insert into DistinctIdDemo values(3,'David',26);
Query OK, 1 row affected (0.22 sec)

mysql> insert into DistinctIdDemo values(2,'Larry',29);
Query OK, 1 row affected (0.20 sec)

전체 레코드 확인

먼저 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DistinctIdDemo;

실행 결과는 다음과 같습니다.

+------+-------+------+
| Id   | Name  | Age  |
+------+-------+------+
| 1    | Mike  | 23   |
| 2    | Sam   | 24   |
| 1    | Carol | 23   |
| 1    | John  | 28   |
| 3    | David | 26   |
| 2    | Larry | 29   |
+------+-------+------+
6 rows in set (0.00 sec)

위 결과에서 볼 수 있듯이 ID 1은 세 번, ID 2는 두 번 반복되어 있습니다.

GROUP BY로 고유 ID만 조회

이제 GROUP BY를 사용하여 각 ID별로 하나의 레코드만 가져오는 쿼리입니다.

mysql> select *from DistinctIdDemo group by Id;

실행 결과는 다음과 같습니다.

+------+-------+------+
| Id   | Name  | Age  |
+------+-------+------+
| 1    | Mike  | 23   |
| 2    | Sam   | 24   |
| 3    | David | 26   |
+------+-------+------+
3 rows in set (0.00 sec)

중복되던 6개의 레코드가 ID 기준으로 그룹화되어 3개의 행만 반환된 것을 확인할 수 있습니다.

주의 사항

MySQL 5.7 이상 버전에서는 기본적으로 ONLY_FULL_GROUP_BY 모드가 활성화되어 있어, 위와 같은 쿼리가 오류를 발생시킬 수 있습니다. 이 경우 다음과 같은 대안을 사용하는 것이 좋습니다.

  • SELECT 절에 GROUP BY에 사용한 컬럼 외에는 집계 함수(MIN, MAX 등)를 적용합니다. 예: SELECT Id, MIN(Name), MIN(Age) FROM DistinctIdDemo GROUP BY Id;
  • 윈도우 함수인 ROW_NUMBER()를 사용해 각 ID의 첫 번째 레코드만 선택합니다.

이처럼 GROUP BY를 활용하면 중복된 ID 중 하나씩만 골라서 조회할 수 있으며, 상황에 맞게 집계 함수나 윈도우 함수를 함께 사용하면 더욱 안정적인 쿼리를 작성할 수 있습니다.