개요
MySQL에서 다른 열의 BOOLEAN(부울) 값을 기준으로 여러 행을 하나로 연결하려면 GROUP_CONCAT() 함수를 사용하면 됩니다. 이 함수는 GROUP BY 절과 함께 사용하여 특정 기준별로 문자열 값을 쉼표 등의 구분자로 묶어 반환합니다.
이번 글에서는 예제 테이블을 만들고, BOOLEAN 값(1 또는 0)에 따라 메시지를 그룹화하여 연결하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 테이블을 생성합니다. 여기서는 isValidUser 열을 BOOLEAN 타입으로 선언했습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserMessage varchar(100),
isValidUser boolean
);
Query OK, 0 rows affected (0.63 sec)2. 데이터 삽입
INSERT 명령을 사용하여 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable(UserMessage,isValidUser) values('Hi',true);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable(UserMessage,isValidUser) values('Hello',false);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(UserMessage,isValidUser) values('Good',true);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(UserMessage,isValidUser) values('Awesome !!!!!',true);
Query OK, 1 row affected (0.09 sec)3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+---------------+-------------+ | Id | UserMessage | isValidUser | +----+---------------+-------------+ | 1 | Hi | 1 | | 2 | Hello | 0 | | 3 | Good | 1 | | 4 | Awesome !!!!! | 1 | +----+---------------+-------------+ 4 rows in set (0.03 sec)
참고로 MySQL에서 BOOLEAN은 실제로 TINYINT(1)로 저장되기 때문에 true는 1, false는 0으로 표시됩니다.
4. BOOLEAN 값 기준으로 행 연결하기
다음은 다른 열의 BOOLEAN 값을 기준으로 행을 연결하는 쿼리입니다. isValidUser가 1인 레코드끼리, 0인 레코드끼리 각각 그룹화하여 UserMessage를 연결합니다.
mysql> select isValidUser,group_concat(UserMessage) from DemoTable group by isValidUser;
실행 결과는 다음과 같습니다.
+-------------+---------------------------+ | isValidUser | group_concat(UserMessage) | +-------------+---------------------------+ | 0 | Hello | | 1 | Hi,Good,Awesome !!!!! | +-------------+---------------------------+ 2 rows in set (0.07 sec)
마무리 및 추가 팁
이처럼 GROUP_CONCAT() 함수와 GROUP BY 절을 함께 사용하면 BOOLEAN 값뿐만 아니라 어떤 열의 값 기준으로도 손쉽게 행을 연결할 수 있습니다.
추가로 알아두면 유용한 옵션들입니다.
DISTINCT: 중복된 값을 제거하고 연결하려면 group_concat(DISTINCT UserMessage) 형태로 작성할 수 있습니다.
ORDER BY: 연결되는 순서를 지정하려면 group_concat(UserMessage ORDER BY Id)처럼 사용합니다.
SEPARATOR: 기본 구분자는 쉼표(,)이며, group_concat(UserMessage SEPARATOR ' | ')와 같이 원하는 구분자로 변경할 수 있습니다.