欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle?listagg去重distinct的三種方式總結

 更新時間:2022年11月18日 11:17:49   作者:每天都要進步一點點  
這篇文章主要介紹了Oracle?listagg去重distinct的三種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、簡介

最近在工作中,在寫oracle統(tǒng)計查詢的時候,遇到listagg聚合函數(shù)分組聚合之后出現(xiàn)很多重復數(shù)據(jù)的問題,于是研究了一下listagg去重的幾種方法

以下通過實例講解三種實現(xiàn)listagg去重的方法。

二、方法

首先還原listagg聚合之后出現(xiàn)重復數(shù)據(jù)的現(xiàn)象,打開plsql,執(zhí)行如下sql:

select t.department_name depname,
       t.department_key,
       listagg(t.class_key, ',') within group(order by t.class_key) as class_keys
  from V_YDXG_TEACHER_KNSRDGL t
 where 1 = 1
 group by t.department_key, t.department_name

運行結果:

如圖,listagg聚合之后很多重復數(shù)據(jù),下面講解如何解決重復數(shù)據(jù)問題。

【a】 第一種方法

使用wm_concat() + distinct去重聚合

--第一種方法: 使用wm_concat() + distinct去重聚合
select t.department_name depname,
       t.department_key,
       wm_concat(distinct t.class_key) as class_keys
  from V_YDXG_TEACHER_KNSRDGL t
 where 1 = 1
 group by t.department_key, t.department_name

如上圖,listagg聚合之后沒有出現(xiàn)重復數(shù)據(jù)了。oracle官方不太推薦使用wm_concat()來進行聚合,能盡量使用listagg就使用listagg。

【b】第二種方法

使用正則替換方式去重(僅適用于oracle字符串大小比較小的情況)

--第二種方法:使用正則替換方式去重(僅適用于oracle字符串大小比較小的情況)
select t.department_name depname,
       t.department_key,
       regexp_replace(listagg(t.class_key, ',') within
                      group(order by t.class_key),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') as class_keys
  from V_YDXG_TEACHER_KNSRDGL t
 group by t.department_key, t.department_name;

這種方式處理listagg去重問題如果拼接的字符串太長會報oracle超過最大長度的錯誤,只適用于數(shù)據(jù)量比較小的場景。

【c】第三種方法

先去重,再聚合(推薦使用)

--第三種方法:先去重,再聚合
select t.department_name depname,
       t.department_key,
       listagg(t.class_key, ',') within group(order by t.class_key) as class_keys
  from (select distinct s.class_key, s.department_key, s.department_name
          from V_YDXG_TEACHER_KNSRDGL s) t
 group by t.department_key, t.department_name
 
--或者
select s.department_key,
       s.department_name,
       listagg(s.class_key, ',') within group(order by s.class_key) as class_keys
  from (select t.department_key,
               t.department_name,
               t.class_key,
               row_number() over(partition by t.department_key, t.department_name, t.class_key order by t.department_key, t.department_name) as rn
          from V_YDXG_TEACHER_KNSRDGL t
         order by t.department_key, t.department_name, t.class_key) s
 where rn = 1
 group by s.department_key, s.department_name;
 

推薦使用這種方式,先把重復數(shù)據(jù)去重之后再進行聚合處理。

三、總結

以上就是關于listagg聚合函數(shù)去重的三種處理方法的總結,本文僅僅是筆者的一些總結和見解,僅供大家學習參考,希望能對大家有所幫助。也希望大家多多支持腳本之家。

相關文章

  • PL/SQL Developer連接64位的Oracle圖文教程

    PL/SQL Developer連接64位的Oracle圖文教程

    這篇文章主要為大家詳細介紹了PL/SQL Developer連接64位的Oracle圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Oracle 12.2處理sysaux空間占滿問題

    Oracle 12.2處理sysaux空間占滿問題

    今天處理別的問題查看告警日志偶然發(fā)現(xiàn)大量的報錯,無法擴展SYSAUX表空間,于是登錄系統(tǒng),查看系統(tǒng)表空間使用情況,發(fā)現(xiàn)SYSAUX表空間用滿了,所以本文給大家介紹了Oracle 12.2處理sysaux空間占滿問題,需要的朋友可以參考下
    2024-02-02
  • Oracle提高sql執(zhí)行效率的心得建議

    Oracle提高sql執(zhí)行效率的心得建議

    sql執(zhí)行效率一直都是為人所關注,那到底應該怎樣提高呢?有什么比較好的方法,下面與大家分享下比較不錯的建議,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • Oracle計算時間差常用函數(shù)

    Oracle計算時間差常用函數(shù)

    這篇文章主要介紹了Oracle計算時間差常用函數(shù),涉及用法代碼及示例,具有一定參考價值。需要的朋友可以了解下。
    2017-09-09
  • oracle11g 通過修改配置文件方式連接遠程數(shù)據(jù)庫的方法

    oracle11g 通過修改配置文件方式連接遠程數(shù)據(jù)庫的方法

    這篇文章主要介紹了oracle11g 通過修改配置文件方式連接遠程數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2017-04-04
  • 修改計算機名或IP后Oracle10g服務無法啟動的解決方法

    修改計算機名或IP后Oracle10g服務無法啟動的解決方法

    修改計算機名或IP后Oracle10g無法啟動服務即windows服務中有一項oracle服務啟動不了,報錯,下面是具體的解決方法
    2014-01-01
  • ORA-00349|激活 ADG 備庫時遇到的問題及處理方法

    ORA-00349|激活 ADG 備庫時遇到的問題及處理方法

    這篇文章主要介紹了ORA-00349|激活 ADG 備庫時遇到的問題及處理方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Oracle查詢sql錯誤信息的控制和定位

    Oracle查詢sql錯誤信息的控制和定位

    今天小編就為大家分享一篇關于Oracle查詢sql錯誤信息的控制和定位,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Oracle遞歸樹形結構查詢功能

    Oracle遞歸樹形結構查詢功能

    oracle樹狀結構查詢即層次遞歸查詢,是sql語句經(jīng)常用到的,在實際開發(fā)中組織結構實現(xiàn)及其層次化實現(xiàn)功能也是經(jīng)常遇到的。這篇文章給大家介紹了Oracle遞歸樹形結構查詢功能,需要的朋友參考下
    2019-09-09
  • oracle 查詢表名以及表的列名

    oracle 查詢表名以及表的列名

    oracle 查詢表名以及表的列名的代碼。
    2009-07-07

最新評論