STRING_AGG(列名, '分隔符') [WITHIN GROUP (ORDER BY 排序列)]
参数解释:
分隔符:必选参数
WITHIN GROUP:可选,2017版本后支持排序
示例:
sql复制代码
SELECT
username,
STRING_AGG(coursename, ',') WITHIN GROUP (ORDER BY score DESC) AS courses
FROM t_user_course
GROUP BY username;
旧版本替代方案:
sql复制代码
SELECT
username,
courses = STUFF((
SELECT ',' + coursename
FROM t_user_course
WHERE username = a.username
FOR XML PATH('')
), 1, 1, '')
FROM t_user_course a
GROUP BY username;
四、PostgreSQL
STRING_AGG() 函数说明:
聚合函数中灵活性最高,支持大文本(1GB限制),可配合FILTER子句使用。
语法结构:
sql复制代码
STRING_AGG(列名, '分隔符' [ORDER BY 排序列])
参数解释:
分隔符:必选参数
ORDER BY:直接内联排序控制
示例:
sql复制代码
SELECT
username,
STRING_AGG(coursename, '|' ORDER BY course_id) AS courses
FROM t_user_course
GROUP BY username;
特殊用法:
sql复制代码
-- 配合DISTINCT使用
STRING_AGG(DISTINCT coursename, ',')
-- 配合FILTER子句
STRING_AGG(coursename, ',' ORDER BY ...) FILTER (WHERE score > 60)