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[10]

 CREATE TABLE EMPLOYEE (

     ID     INTEGER NOT NULL,

     PRIORITY    INTEGER NOT NULL,

     PHONENUMBER DECIMAL(10, 0),

  PRIMARY KEY(ID, PRIORITY))


 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

CREATE PROCEDURE GETPHONENUMBERS

   (IN  EMPID   INTEGER,

    OUT NUMBERS PHONELIST)

 BEGIN

   SET NUMBERS =

     (SELECT ARRAY_AGG(PHONENUMBER)

     FROM EMPLOYEE

     WHERE ID = EMPID);

 END

 

猜你喜欢

转载自cqhclys830.iteye.com/blog/2082768