ARRAY_AGG
ARRAY_AGG 函数将一组元素聚集到数组中。
- 表达式
- 返回值的表达式,该值是可以为 CREATE TYPE (Array) 语句指定的任何数据类型。
- 排序条件
- 指定聚集中处理的同一分组集合中的行顺序。 如果未指定 ORDER BY 子句,或者如果 ORDER BY 子句无法区分排序键值的顺序,那么将对同一分组集中的行进行任意排序。
- 排序-关键-表达
- 指定作为列名或表达式的排序键值。 列或表达式的数据类型不得为 DATALINK 或 XML 值。
只能在以下特定上下文中的 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
