sql >> データベース >  >> RDS >> Oracle

listaggから重複を削除する方法

    最初に必要なDISTINCT値を選択してから、それらにLISTAGGを適用します。これはスコットのスキーマに基づく例です。

    SQL> -- Duplicate jobs within the department
    SQL> select deptno, listagg(job, ', ') within group (order by job) jobs
      2  from emp
      3  group by deptno;
    
        DEPTNO JOBS
    ---------- ------------------------------------------------------------
            10 CLERK, MANAGER, PRESIDENT
            20 ANALYST, ANALYST, CLERK, CLERK, MANAGER
            30 CLERK, MANAGER, SALESMAN, SALESMAN, SALESMAN, SALESMAN
    
    SQL>
    SQL> -- This won't work - DISTINCT can't be used in LISTAGG
    SQL> select deptno, listagg(distinct job, ', ') within group (order by job) jobs
      2  from emp
      3  group by deptno;
    select deptno, listagg(distinct job, ', ') within group (order by job) jobs
                   *
    ERROR at line 1:
    ORA-30482: DISTINCT option not allowed for this function
    
    
    SQL>
    SQL> -- So - select distinct jobs first, then apply LISTAGG to it
    SQL> select x.deptno, listagg(x.job, ', ') within group (order by x.job) jobs
      2  from (select distinct deptno, job
      3        from emp) x
      4  group by x.deptno;
    
        DEPTNO JOBS
    ---------- ------------------------------------------------------------
            10 CLERK, MANAGER, PRESIDENT
            20 ANALYST, CLERK, MANAGER
            30 CLERK, MANAGER, SALESMAN
    
    SQL>
    


    1. MySQLで行のない日でも1日あたりの行数をグループ化するにはどうすればよいですか?

    2. データベースの作成を解釈するときのOracleとMysqlの違いは何ですか?

    3. USER_SOURCEoracleのLINEのようなSQLサーバーの行番号

    4. MYSQLの別の列でMAX(列値)、PARTITIONの行を選択するにはどうすればよいですか?