{{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" "기본"}}