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

MySQL에서 여러 레코드의 열 값이 동일한지 확인하고 특수 문자로 구분해 한 행으로 합치는 방법

여러 레코드에 걸쳐 열 값이 서로 동일한지 확인하고, 그 값들을 하나의 행에 특수 문자로 구분해 나열하려면 GROUP_CONCAT() 함수와 DISTINCT 키워드를 함께 사용하면 됩니다. 먼저 예제에 사용할 테이블부터 만들어 보겠습니다.

1. 예제 테이블 생성

mysql> create table DemoTable
(
    Id int,
    Subject varchar(40)
);
Query OK, 0 rows affected (0.56 sec)

2. 샘플 데이터 삽입

insert 명령을 사용해 테이블에 레코드를 몇 개 넣어 보겠습니다. 일부러 중복된 값도 함께 입력합니다.

mysql> insert into DemoTable values(100,'MySQL');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(100,'MongoDB');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(100,'Java');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(100,'MongoDB');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(101,'MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(101,'MySQL');
Query OK, 1 row affected (0.10 sec)

3. 전체 레코드 조회

select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+------+---------+
| Id   | Subject |
+------+---------+
| 100  | MySQL   |
| 100  | MongoDB |
| 100  | Java    |
| 100  | MongoDB |
| 101  | MySQL   |
| 101  | MySQL   |
+------+---------+
6 rows in set (0.00 sec)

결과를 보면 Id가 100인 레코드에는 'MongoDB'가, Id가 101인 레코드에는 'MySQL'이 중복되어 저장되어 있습니다.

4. 특수 문자로 구분해 한 행으로 합치기

이제 여러 레코드 간에 열 값이 동일한지 확인하고, 이 값들을 특수 문자로 구분해 단일 행으로 묶는 쿼리입니다. 여기서는 구분자(separator)로 하이픈(-)을 사용했습니다.

mysql> select Id,group_concat(distinct Subject separator '-') as Subject
    from DemoTable
    group by Id;

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

+------+--------------------+
| Id   | Subject            |
+------+--------------------+
| 100  | Java-MongoDB-MySQL |
| 101  | MySQL              |
+------+--------------------+
2 rows in set (0.04 sec)

핵심 정리

GROUP_CONCAT() 내부에 DISTINCT를 지정하면 그룹 내에서 중복된 값이 자동으로 제거됩니다. 또한 separator 옵션을 사용하면 기본값인 콤마(,) 대신 하이픈, 슬래시 등 원하는 구분 문자를 자유롭게 지정할 수 있습니다. 위 예제에서는 Id를 기준으로 group by로 그룹화한 뒤, 각 그룹의 Subject 값을 하이픈으로 연결해 한 행으로 깔끔하게 출력했습니다.