teradata - 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
有什么问题,我该如何解决?
解决方案
首先,您需要定义一个数组类型来保存聚合结果。这就像
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 语句中创建的新数组类型调用构造函数。
推荐阅读
- c++17 - boost::mpi 和 boost:serialization 与 std::variant
- swift - iOS Swift - 将数据从第一个 ViewController 传递到第三个 ViewConTroller
- c++ - 如何在安装了 WSL 的 Visual Studio Code 中修复“g++:错误:helloworld.cpp:没有这样的文件或目录”?
- angularjs - AngularJS $http 反馈给用户 ng-if 多逻辑问题
- git - 如何在不同的相应本地分支 package.json 中使用单独的 git 分支作为 npm 包依赖项?
- sql-server - ForeignKey SetNull OnDelete
- r - 如何在单个图中绘制不同数据集的平均线性回归
- java - Junit 无法使用 Spark Structured Streaming 创建的文件删除 @TempDir
- python-3.x - 根据python中的列合并两个数据框
- centos - 如何在 centos 中更改/升级我的 GLIBCXX