Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


LISTAGG

📄字数 868
👁️阅读量 加载中...

功能描述

将某个表中多个行的指定列值合并为一个字符串,通过指定分隔符连接。

语法格式

sql
LISTAGG ([ DISTINCT | ALL ] expr1[,expr2])
[WITHIN GROUP (order_by_clause)]
[OVER ([analytic_clause])]

输入参数

  • expr1:列名或表达式,用来指定输入数据。
  • expr2:可选参数,VARCHAR 类型,或能隐式转换为 VARCHAR 类型的其他类型,分隔符,默认无分隔符,expr1 直接连接。
  • OVER ([analytic_clause]):可选的分析子句,支持分组子句,排序子句以及范围子句,详情见analytic_clause
  • WITHIN GROUP (order_by_clause):可选的子句,用于指定组合的元素的排序顺序。

输出结果

VARCHAR 类型,expr1NULL,返回 NULL,指定分隔符为 NULL,输出结果为不带分隔符的合并字符串。

注意

  • LISTAGG 函数可以在 OVERWITHIN GROUP 子句中同时指定排序,此时排序结果以 WITHIN GROUP 子句中的排序结果为准。

示例

sql
-- 建表并插入数据
SQL> CREATE TABLE emp 
     (
         empno INT PRIMARY KEY,
         ename VARCHAR(10),
         deptno INT,
         sal DECIMAL(10,2),
         hiredate DATE
     );

SQL> INSERT INTO emp VALUES
     (7369, 'SMITH', 20, 800, TO_DATE('17-12-1980', 'DD-MM-YYYY')),
     (7499, 'ALLEN', 30, 1600, TO_DATE('20-2-1981', 'DD-MM-YYYY')),
     (7521, 'WARD', 30, 1250, TO_DATE('22-2-1981', 'DD-MM-YYYY')),
     (7566, 'JONES', 20, 2975, TO_DATE('2-4-1981', 'DD-MM-YYYY')),
     (7654, 'MARTIN', 30, 1250, TO_DATE('28-9-1981', 'DD-MM-YYYY'));

-- 将指定列值合并为一个字符串
SQL> SELECT deptno, LISTAGG(ename, ', ') WITHIN GROUP (ORDER BY hiredate) FROM emp GROUP BY deptno;

+--------+---------------------+
| DEPTNO |        EXPR1        |
+--------+---------------------+
| 20     | SMITH, JONES        |
| 30     | ALLEN, WARD, MARTIN |
+--------+---------------------+