groupArray函数
groupArray([DISTINCT] expr [, limit]) [FILTER (WHERE condition)]
功能描述
groupArray函数是COLLECT_LIST 别名,支持 COLLECT_LIST 的全部特性。
参数说明
expr:任意类型的表达式,用于从输入数据中收集元素。
limit:可选参数,整数类型,表示最多收集的元素个数。如果不指定,则收集所有元素。
返回结果
- 返回一个数组,数组中的元素类型与输入参数类型相同。
- 如果设置了
DISTINCT 关键字,则返回一个去重后的数组。
- 如果指定了
limit 参数,则返回的数组最多包含 limit 个元素。
- 函数不保证返回结果中元素的顺序。
- 如果输入数据包含
NULL 值,则这些值不会被包含在返回的数组中。
使用示例
- 返回包含非重复元素的数组:
SELECT groupArray(DISTINCT col) FROM VALUES (1), (2), (1), (NULL) AS tab(col);
+----------------------------+
| groupArray(DISTINCT col) |
+----------------------------+
| [1,2] |
+----------------------------+
- 返回包含重复元素的数组:
SELECT groupArray(col) FROM VALUES (1), (2), (1), (NULL) AS tab(col);
+-------------------+
| groupArray(col) |
+-------------------+
| [1,2,1] |
+-------------------+
- 从字符串数据中收集字符:
SELECT groupArray(col)
FROM VALUES ("apple"), ("banana"), ("cherry"), (NULL) AS tab(col);
+-----------------------------+
| groupArray(col) |
+-----------------------------+
| ["apple","banana","cherry"] |
+-----------------------------+
- 收集并返回包含 null 值的数组:
SELECT groupArray(col) FROM VALUES (true), (false), (null) AS tab(col);
+-------------------+
| groupArray(col) |
+-------------------+
| [true,false] |
+-------------------+
- 使用 FILTER 子句条件性地收集元素:
SELECT groupArray(col) FILTER (WHERE col > 1) FROM VALUES (1), (2), (3), (1) AS tab(col);
+--------------------------------------------+
| groupArray(col) FILTER (WHERE (col > 1)) |
+--------------------------------------------+
| [2,3] |
+--------------------------------------------+
- 结合 FILTER 子句和 DISTINCT 收集不重复的条件元素:
SELECT groupArray(DISTINCT col) FILTER (WHERE col <= 3) FROM VALUES (1), (2), (3), (3), (4) AS tab(col);
+-----------------------------------------------------------+
| collect_list(DISTINCT col) FILTER (WHERE (col <= 3)) |
+-----------------------------------------------------------+
| [1,2,3] |
+-----------------------------------------------------------+
- 使用 limit 参数限制返回的元素个数:
SELECT groupArray(col, 2) FROM VALUES (1), (2), (3), (4) AS tab(col);
+----------------------+
| groupArray(col, 2) |
+----------------------+
| [1,2] |
+----------------------+