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

MySQL에서 중복 제거 후 쿼리 결과를 하나의 문자열로 연결하는 방법

MySQL에서 여러 행에 흩어져 있는 값을 하나의 문자열로 합치려면 group_concat() 함수를 사용하면 됩니다. 이 함수는 지정한 컬럼의 값들을 쉼표(,) 같은 구분자로 이어 붙여 단일 문자열로 반환해 주기 때문에, 목록 형태의 결과를 만들 때 매우 유용합니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
-> (
-> Subject varchar(10)
-> );
Query OK, 0 rows affected (0.43 sec)

2. 샘플 데이터 입력

insert 명령으로 데이터를 입력합니다. 이때 중복 제거 효과를 확인할 수 있도록 의도적으로 같은 값('C++', 'MongoDB', 'Java')을 여러 번 넣었습니다.

mysql> insert into DemoTable values('C');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values('C++');
Query OK, 1 row affected (0.25 sec)

mysql> insert into DemoTable values('C++');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.34 sec)

mysql> insert into DemoTable values('Java');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values('Java');
Query OK, 1 row affected (0.10 sec)

3. 전체 데이터 확인

select 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과

+---------+
| Subject |
+---------+
| C |
| C++ |
| C++ |
| MongoDB |
| MySQL |
| MongoDB |
| MongoDB |
| Java |
| Java |
+---------+
9 rows in set (0.00 sec)

총 9개의 행이 있으며, 그중 일부 값은 중복되어 있습니다.

4. 중복을 제거한 결과를 문자열로 연결하기

다음은 서브쿼리에서 group by로 중복을 먼저 제거한 뒤, 외부 쿼리에서 group_concat()으로 값을 하나의 문자열로 합치는 쿼리입니다.

mysql> select group_concat(tbl.sub) from (select Subject sub from DemoTable group by Subject ) tbl;

실행 결과

+--------------------------+
| group_concat(tbl.sub) |
+--------------------------+
| C,C++,MongoDB,MySQL,Java |
+--------------------------+
1 row in set (0.04 sec)

중복 없이 5개의 과목명이 쉼표로 구분된 하나의 문자열로 깔끔하게 출력된 것을 확인할 수 있습니다.

5. 더 간단한 방법: DISTINCT 키워드 활용

서브쿼리 없이 group_concat() 안에 DISTINCT를 직접 사용하면 더 짧은 쿼리로 동일한 결과를 얻을 수 있습니다.

mysql> select group_concat(distinct Subject) from DemoTable;

또한 SEPARATOR 옵션을 사용하면 기본 구분자인 쉼표 대신 원하는 구분자를 지정할 수도 있습니다.

mysql> select group_concat(distinct Subject separator ' | ') from DemoTable;
-- 결과 예시: C | C++ | MongoDB | MySQL | Java

정리

MySQL에서 중복 제거된 쿼리 결과를 문자열로 연결하려면 group_concat() 함수를 사용하면 됩니다. 서브쿼리 + group by 조합 또는 group_concat(distinct ...) 방식을 상황에 맞게 선택하고, 필요하다면 SEPARATOR로 구분자를 자유롭게 변경할 수 있습니다.