将一组值聚合为 ARRAY 类型。支持 DISTINCT 去重和 WITHIN GROUP ORDER BY 排序。与
COLLECT_LIST
COLLECT_LIST
功能相同,
ARRAY_AGG
ARRAY_AGG
是 SQL 标准写法。
语法
ARRAY_AGG([DISTINCT] <expr> [WITHIN GROUP (ORDER BY <expr> [ASC|DESC])])
参数说明
<expr>
<expr>
:要聚合的列或表达式。
DISTINCT
DISTINCT
:对值去重后再聚合。
WITHIN GROUP (ORDER BY ...)
WITHIN GROUP (ORDER BY ...)
:指定数组元素的排列顺序。
⚠️ 不能同时使用 DISTINCT 和 ORDER BY。
使用示例
-- 基本用法
SELECT array_agg(v)
FROM (VALUES (1),(2),(3)) t(v);
-- [1,2,3]
-- 指定排序
SELECT array_agg(v WITHIN GROUP (ORDER BY v DESC))
FROM (VALUES (3),(1),(2)) t(v);
-- [3,2,1]
-- DISTINCT 去重
SELECT array_agg(DISTINCT v)
FROM (VALUES (1),(2),(1),(3)) t(v);
-- [1,2,3]
-- GROUP BY 分组
SELECT k, array_agg(v)
FROM (VALUES ('x',1),('x',2),('y',3)) t(k,v)
GROUP BY k;
-- x | [1,2]
-- y | [3]