MySQL GROUP_CONCAT 결과에서 마지막 값 가져오기
MySQL에서 콤마(,)로 구분된 문자열이 저장된 컬럼의 마지막 값을 추출하려면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나누고, 양수 인덱스는 앞에서부터, 음수 인덱스는 뒤에서부터 값을 반환합니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 과목 목록을 저장할 테이블을 생성합니다.
mysql> create table DemoTable1525
-> (
-> ListOfSubjects text
-> );
Query OK, 0 rows affected (1.13 sec)
2단계: 데이터 삽입
INSERT 명령을 사용하여 샘플 데이터를 입력합니다.
mysql> insert into DemoTable1525 values('MongoDB,C');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1525 values('Java,C++,MySQL');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1525 values('Python,C++,C,Java');
Query OK, 1 row affected (0.14 sec)3단계: 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1525;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------------------+
| ListOfSubjects |
+-------------------+
| MongoDB,C |
| Java,C++,MySQL |
| Python,C++,C,Java |
+-------------------+
3 rows in set (0.00 sec)
4단계: SUBSTRING_INDEX()로 마지막 값 추출
다음은 각 행에서 마지막 값을 가져오는 핵심 쿼리입니다. 구분자 ','와 함께 -1을 인자로 전달하면 뒤에서 첫 번째 값, 즉 마지막 값이 반환됩니다.
mysql> select substring_index(ListOfSubjects,',',-1) as LastValue from DemoTable1525;
실행 결과는 다음과 같습니다.
+-----------+
| LastValue |
+-----------+
| C |
| MySQL |
| Java |
+-----------+
3 rows in set (0.00 sec)
SUBSTRING_INDEX() 동작 원리 정리
- substring_index(컬럼명, ',', 1): 첫 번째 값 반환
- substring_index(컬럼명, ',', -1): 마지막 값 반환
- substring_index(컬럼명, ',', 2): 처음 두 개의 값 반환
이처럼 SUBSTRING_INDEX()는 GROUP_CONCAT으로 생성된 문자열뿐 아니라, 콤마 등 특정 구분자로 연결된 모든 문자열 데이터에서 원하는 위치의 값을 손쉽게 추출할 수 있는 유용한 MySQL 함수입니다.