{{htmlmetatags> metatag-description=(여러 행 문자열 병합, GROUP_CONCAT, STRING_AGG, LISTAGG, 데이터베이스, DBMS, SQL, MySQL, MariaDB, MSSQL, Oracle, Tibero, PostgreSQL) metatag-og:description=(여러 행 문자열 병합, GROUP_CONCAT, STRING_AGG, LISTAGG, 데이터베이스, DBMS, SQL, MySQL, MariaDB, MSSQL, Oracle, Tibero, PostgreSQL) }} ====== 여러 행 문자열 병합 ====== 최소 지원 버전은 약간의 차이가 있을 수 있습니다. ===== 테이블 명세 ===== ^ 물리명 ^ 논리명 ^ 타입 ^ 길이 ^ | 해시태그 | hashtag | 문자형 | 100 | | 정렬 순서 | sort_order | 숫자형 | | ===== SQL 스크립트 ===== CREATE TABLE ex_aggregate ( hashtag VARCHAR(100) NOT NULL , sort_order INT NOT NULL ); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('MySQL', 1); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('MariaDB', 2); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('MSSQL', 3); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('Oracle', 4); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('Tibero', 5); INSERT INTO ex_aggregate (hashtag, sort_order) VALUES ('PostgreSQL', 6); ===== MySQL/MariaDB ===== /* MySQL 4.1 이상/MariaDB 5.1 이상 */ SELECT GROUP_CONCAT(hashtag ORDER BY sort_order ASC SEPARATOR ',') AS hashtag FROM ex_aggregate ; ===== MSSQL ===== /* MSSQL 2005 이상 */ SELECT STUFF( (SELECT ',' + hashtag FROM ex_aggregate ORDER BY sort_order ASC FOR XML PATH('') ) , 1, 1, '') AS hashtag; ; /* MSSQL 2017 이상 */ -- 정렬 순서 미보장 SELECT STRING_AGG(hashtag, ',') AS hashtag FROM ex_aggregate ; /* MSSQL 2022 이상 */ SELECT STRING_AGG(hashtag, ',') WITHIN GROUP (ORDER BY sort_order ASC) AS hashtag FROM ex_aggregate ; ===== Oracle/Tibero ===== /* Oracle 11g 이상/Tibero 3 이상 */ SELECT LISTAGG(hashtag, ',') WITHIN GROUP (ORDER BY sort_order ASC) AS hashtag FROM ex_aggregate ; ===== PostgreSQL ===== /* PostgreSQL 9.0 이상 */ SELECT STRING_AGG(hashtag, ',' ORDER BY sort_order ASC) AS hashtag FROM ex_aggregate ; {{tag>"쿼리" "Query" "기본"}}