• lightdb22.3预览-listagg 增强


    lightdb22.3 - listagg 增强

    LightDB 在22.3版本对listagg 进行了增强,现在支持同时使用within group(order by xxx ) 和over(partition by xxx)

    oracle listagg

    oracle 19c 中listagg 语法如下用法:

    Description of listagg.eps follows

    DISTINCT 从19c 开始支持

    LightDB listagg

    之前版本限制:

    1. 不支持 WITHIN GROUP order_by_clause 与 OVER query_partition_clause一起用。

    2. 不支持DISTINCT 与 OVER query_partition_clause一起使用

    22.3 版本取出来上述1的限制,目前只有如下限制:

    • 不支持DISTINCT 与 WITHIN GROUP order_by_clause OVER query_partition_clause 一起使用,其实就是上述的2

    案例

    表结构及数据:

    CREATE TABLE EMP
    (   EMPNO    NUMBER(4, 0),
        ENAME    VARCHAR2(10),
        JOB      VARCHAR2(9),
        MGR      NUMBER(4, 0),
        HIREDATE DATE,
        SAL      NUMBER(7, 2),
        COMM     NUMBER(7, 2),
        DEPTNO   NUMBER(2, 0),
        DNAME    VARCHAR2(100),
        CONSTRAINT PK_EMP PRIMARY KEY (EMPNO)
    );
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7369, 'SMITH',  'CLERK',    7902, to_date('1980-12-17','yyyy-mm-dd'), 800.00,  null,    20, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7499, 'ALLEN',  'SALESMAN', 7698, to_date('1981-02-20','yyyy-mm-dd'), 1600.00, 300.00,  30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7521, 'WARD',   'SALESMAN', 7698, to_date('1981-02-22','yyyy-mm-dd'), 1250.00, 500.00,  30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7566, 'JONES',  'MANAGER',  7839, to_date('1981-04-02','yyyy-mm-dd'), 2975.00, null,    20, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('1981-09-28','yyyy-mm-dd'), 1250.00, 1400.00, 30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7698, 'BLAKE',  'MANAGER',  7839, to_date('1981-05-01','yyyy-mm-dd'), 2850.00, null,    30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7782, 'CLARK',  'MANAGER',  7839, to_date('1981-06-09','yyyy-mm-dd'), 2450.00, null,    10, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7788, 'SCOTT',  'ANALYST',  7566, to_date('1987-04-19','yyyy-mm-dd'), 3000.00, null,    20, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7839, 'KING',   'PRESIDENT',null, to_date('1981-11-17','yyyy-mm-dd'), 5000.00, null,    10, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7844, 'TURNER', 'SALESMAN', 7698, to_date('1981-09-08','yyyy-mm-dd'), 1500.00, 0.00,    30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7876, 'ADAMS',  'CLERK',    7788, to_date('1987-05-23','yyyy-mm-dd'), 1100.00, null,    20, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7900, 'JAMES',  'CLERK',    7698, to_date('1981-12-03','yyyy-mm-dd'), 950.00,  null,    30, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7902, 'FORD',   'ANALYST',  7566, to_date('1981-12-03','yyyy-mm-dd'), 3000.00, null,    20, null);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7934, 'MILLER', 'CLERK',    7782, to_date('1982-01-23','yyyy-mm-dd'), 1300.00, null,    10, null);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    查询:

    select listagg(ename, ',') within group(order by ename) over(partition by deptno) as enames,
           deptno,
           ename
      from EMP;
      
                      enames                | deptno | ename  
    --------------------------------------+--------+--------
     CLARK,KING,MILLER                    |     10 | CLARK
     CLARK,KING,MILLER                    |     10 | KING
     CLARK,KING,MILLER                    |     10 | MILLER
     ADAMS,FORD,JONES,SCOTT,SMITH         |     20 | ADAMS
     ADAMS,FORD,JONES,SCOTT,SMITH         |     20 | FORD
     ADAMS,FORD,JONES,SCOTT,SMITH         |     20 | JONES
     ADAMS,FORD,JONES,SCOTT,SMITH         |     20 | SCOTT
     ADAMS,FORD,JONES,SCOTT,SMITH         |     20 | SMITH
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | ALLEN
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | BLAKE
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | JAMES
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | MARTIN
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | TURNER
     ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD |     30 | WARD
    (14 rows)
    
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    不支持distinct:

    chuhx@test=# select listagg(distinct ename, ',') within group(order by ename) over(partition by deptno) as enames, deptno, ename from EMP;
    ERROR:  DISTINCT is not implemented for window functions
    LINE 1: select listagg(distinct ename, ',') within group(order by en...
    
    
    • 1
    • 2
    • 3
    • 4

    参考

    oracle LISTAGG

  • 相关阅读:
    探索大模型技术在运维方向的应用前景
    Yolov5更换上采样方式
    Redis
    PyCharm 远程debug 快速上手
    金堂县中医医院二期扩建项目建设进入收尾阶段
    SpringBoot 中使用布隆过滤器 Guava、Redission实现
    【打工日常】云原生之部署个人使用的高速下载器Gopeed
    PostgreSQL逻辑复制(Logical Replication)原理
    ArcGIS 10.3安装教程!
    深度学习笔记之优化算法(三)动量法的简单认识
  • 原文地址:https://blog.csdn.net/qq_17713935/article/details/126762567