色破飞机 发表于 2016-11-15 08:30:04

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]
查看完整版本: DB2聚合函数详解