ARRAY_AGG

ARRAY_AGG 函数将一组元素聚集到数组中。

读取语法图跳过可视语法图ARRAY_AGG (表达式ORDER BY,排序键表达式ASCDESC)
表达式
返回值的表达式,该值是可以为 CREATE TYPE (Array) 语句指定的任何数据类型。
排序条件
指定聚集中处理的同一分组集合中的行顺序。 如果未指定 ORDER BY 子句,或者如果 ORDER BY 子句无法区分排序键值的顺序,那么将对同一分组集中的行进行任意排序。
排序-关键-表达
指定作为列名或表达式的排序键值。 列或表达式的数据类型不得为 DATALINK 或 XML 值。
聚集元素的排序基于排序键的值。
sort-key-expression 的长度属性总和不得超过 3.5 千兆字节。
当执行包含 ARRAY_AGG 函数的语句并且 sort-key-expression 是 SBCS 数据,混合数据或 Unicode 数据时,如果非 *HEX 的整理顺序生效,那么将通过比较加权值来获取结果。 通过将整理顺序应用于 sort-key-expression来派生加权值。
只能在以下特定上下文中的 SQL 过程 或 SQL 函数 中指定 ARRAY_AGG 函数:
  • SELECT INTO 语句的 select-子句
  • SET 语句右侧的标量子查询的 select 子句

使用 ARRAY_AGG 的 SELECT 不能包含 DISTINCT 子句。

示例

假定按如下所示创建数组类型和表:

CREATE TYPE PHONELIST AS DECIMAL(10,0) ARRAY[10]

CREATE TABLE EMPLOYEE (
    ID          INTEGER NOT NULL,
    PRIORITY    INTEGER NOT NULL,
    PHONENUMBER DECIMAL(10,0),
    PRIMARY KEY (ID, PRIORITY) )
创建一个过程,该过程使用 SELECT INTO 语句来返回可访问员工的优先联系人编号列表。
CREATE PROCEDURE GETPHONENUMBERS
    (IN EMPID INTEGER,
     OUT NUMBERS PHONELIST)
  BEGIN
    SELECT ARRAY_AGG(PHONENUMBER ORDER BY PRIORITY) INTO NUMBERS
        FROM EMPLOYEE
        WHERE ID = EMPID;
  END
创建一个过程,该过程使用 SET 语句以任意顺序返回员工的联系人编号列表。
CREATE PROCEDURE GETPHONENUMBERS
    (IN EMPID INTEGER,
     OUT NUMBERS PHONELIST)
  BEGIN
    SET NUMBERS = 
      (SELECT ARRAY_AGG(PHONENUMBER)
        FROM EMPLOYEE
        WHERE ID = EMPID);
  END