DB2聚合函数详解
1、函数名array_agg() 返回一组基本元素,返回元素必须是create type(array)类型。
2、语法
>>-ARRAY_AGG--(--expression--+----------------------------------+-->
| .-,------------------. |
| V .-ASC--. | |
'-ORDER BY----sort-key--+------+-+-'
'-DESC-'
>--)-----------------------------------------------------------><
3、函数解释
array_agg函数返回一组基本元素。返回的数据类型必须是使用create type(array)类型的。数据中的元素的顺序有sql中指定的sort-key决定的。如果在sql中没有制定sort-key,那么在返回的数组中的元素的顺序是不确定的。但是即使在sql中没有指定sort-key,多次执同一sql返回的元素顺序是确定的。
如果在sql子查询中包含了array_agg函数,那么调用array_agg,listag,xmlagg,xmlgroup函数时必须制定同一个元素排序或者不制定排序的元素。
array_agg函数可以用在以下制定的sql存储过程中的上下文中:
[*]SELECT INTO 语句中
[*]定义一个cursor使用的sql语句中,但是此cursor是不可滚动的
[*]在set语句中右边,用sql语句查询定义个标量
4、应用举例
CREATE TYPE PHONELIST AS DECIMAL(10, 0)ARRAY
CREATE TABLE EMPLOYEE (
ID INTEGER NOT NULL,
PRIORITY INTEGER NOT NULL,
PHONENUMBER DECIMAL(10, 0),
PRIMARY KEY(ID, PRIORITY))
CREATE PROCEDURE GETPHONENUMBERS
(INEMPID INTEGER,
OUT NUMBERS PHONELIST)
BEGIN
SELECT ARRAY_AGG(PHONENUMBER ORDER BY PRIORITY)
INTO NUMBERS
FROM EMPLOYEE
WHERE ID = EMPID;
END
CREATE PROCEDURE GETPHONENUMBERS
(INEMPID INTEGER,
OUT NUMBERS PHONELIST)
BEGIN
SET NUMBERS =
(SELECT ARRAY_AGG(PHONENUMBER)
FROM EMPLOYEE
WHERE ID = EMPID);
END
页:
[1]