首页 > 解决方案 > teradata 中的 Array_agg() 功能

问题描述

我有以下列的表格。

Emp name,emp id,emp ph no 
X,1,99
X,2,10
Y,2,30

输出:

x,1,(99,10)

基于 emp 名称和按 emp Id 排序的电话数组

询问:

select emp-name,array_agg(emp_phno order by emp_id) from emp

错误:

使用无效数量或类型的参数调用的函数 array_agg

有什么问题,我该如何解决?

标签: teradata

解决方案


首先,您需要定义一个数组类型来保存聚合结果。这就像

CREATE TYPE emp_phno_arr AS VARCHAR(10) ARRAY[5];

在上面的 SQL 中注意VARCHAR. 我将其设置为 10,因为这是北美电话号码的长度。您可能希望它具有不同的长度。也不是数组的大小。我将其设置为 5。这意味着聚合将允许每人最多 5 个电话号码。如果数量超过 5 个,则聚合将失败。但是您可以根据需要更改数组的大小。

接下来,您将要进行聚合。

SELECT emp-name, ARRAY_AGG(emp_phno, NEW emp_phno_arr()) FROM emp GROUP BY  emp-name;

注意ARRAY_AGG函数的第二个参数。它为您在第一个 SQL 语句中创建的新数组类型调用构造函数。


推荐阅读