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

MySQL에서 GROUP_CONCAT()으로 값이 1인 데이터만 추출해 단일 행으로 연결하는 방법

MySQL에서 특정 열의 값이 1인 행만 골라 여러 개의 값을 하나의 문자열로 연결하고 싶다면 GROUP_CONCAT() 함수와 WHERE 절을 함께 사용하면 됩니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
(
    PlayerName varchar(40),
    PlayerStatus tinyint(1)
);
Query OK, 0 rows affected (0.60 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Chris',1);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('David',0);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Sam',1);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Carol',1);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Bob',0);
Query OK, 1 row affected (0.14 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+------------+--------------+
| PlayerName | PlayerStatus |
+------------+--------------+
| Chris      |            1 |
| David      |            0 |
| Sam        |            1 |
| Carol      |            1 |
| Bob        |            0 |
+------------+--------------+
5 rows in set (0.00 sec)

4. 값이 1인 데이터만 하나의 행으로 연결하기

다음 쿼리는 WHERE 절로 PlayerStatus가 1인 행만 필터링한 뒤, GROUP_CONCAT()을 사용해 플레이어 이름들을 쉼표(,)로 구분된 단일 문자열로 묶어 출력합니다.

mysql> select group_concat(PlayerName) from DemoTable where PlayerStatus=1;

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

+--------------------------+
| group_concat(PlayerName) |
+--------------------------+
| Chris,Sam,Carol          |
+--------------------------+
1 row in set (0.00 sec)

참고 사항

GROUP_CONCAT()은 기본적으로 쉼표로 값을 구분하지만, SEPARATOR 옵션을 사용하면 원하는 구분자를 지정할 수도 있습니다. 또한 이 함수의 기본 최대 반환 길이는 1024바이트이므로, 더 많은 데이터를 연결해야 하는 경우에는 group_concat_max_len 시스템 변수를 조정해 주는 것이 좋습니다.