跳到主要内容
版本:2.5

array_agg

功能

将一列中的值(包括空值 null)串联成一个数组,可以用于多行转一行(行转列)。

语法

ARRAY_AGG(col)

参数说明

col:需要转换的列。支持的数据类型为 BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、LARGEINT、FLOAT、DOUBLE、VARCHAR、CHAR、DATETIME、DATE。

返回值说明

返回的数据类型为 ARRAY。

注意事项

  • 数组中元素不保证顺序。
  • 返回转换生成的数组。数组中的元素类型与 col 类型一致。

示例

下面的示例使用如下数据表进行介绍。

mysql> select * from test;
+------+------+
| c1 | c2 |
+------+------+
| 1 | a |
| 1 | b |
| 2 | c |
| 2 | NULL |
| 3 | NULL |
+------+------+

根据 c1 列分组,对 c2 执行行转列

mysql> select c1, array_agg(c2) from test group by c1;
+------+-----------------+
| c1 | array_agg(`c2`) |
+------+-----------------+
| 1 | ["a","b"] |
| 2 | [null,"c"] |
| 3 | [null] |
+------+-----------------+

对于整行进行转换时,如果没有满足条件的数据,聚合结果为 NULL

mysql> select array_agg(c2) from test where c1>4;
+-----------------+
| array_agg(`c2`) |
+-----------------+
| NULL |
+-----------------+