最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle?listagg去重distinct的三種方式總結(jié)

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

一、簡介

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

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

二、方法

首先還原listagg聚合之后出現(xiàn)重復(fù)數(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

運行結(jié)果:

如圖,listagg聚合之后很多重復(fù)數(shù)據(jù),下面講解如何解決重復(fù)數(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)重復(fù)數(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;
 

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

三、總結(jié)

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

相關(guān)文章

  • 索引在Oracle中的應(yīng)用深入分析

    索引在Oracle中的應(yīng)用深入分析

    以下是對索引在Oracle中的應(yīng)用進行了深入的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • oracle12C安裝步驟(圖文詳解)

    oracle12C安裝步驟(圖文詳解)

    這篇文章主要介紹了oracle12C安裝步驟(圖文詳解),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Oracle的約束介紹與約束維護

    Oracle的約束介紹與約束維護

    這篇文章介紹了Oracle的約束與約束維護,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Oracle使用dblink實現(xiàn)跨庫訪問的實例代碼

    Oracle使用dblink實現(xiàn)跨庫訪問的實例代碼

    dbLink是簡稱,全稱是databaselink,database link是定義一個數(shù)據(jù)庫到另一個數(shù)據(jù)庫的路徑的對象,database link允許你查詢遠(yuǎn)程表及執(zhí)行遠(yuǎn)程程序,本文給大家介紹了Oracle如何使用dblink實現(xiàn)跨庫訪問,需要的朋友可以參考下
    2024-03-03
  • Oracle Listener 動態(tài)注冊 與 靜態(tài)注冊

    Oracle Listener 動態(tài)注冊 與 靜態(tài)注冊

    注冊就是將數(shù)據(jù)庫作為一個服務(wù)注冊到監(jiān)聽程序??蛻舳瞬恍枰罃?shù)據(jù)庫名和實例名,只需要知道該數(shù)據(jù)庫對外提供的服務(wù)名就可以申請連接到數(shù)據(jù)庫
    2015-12-12
  • Oracle數(shù)據(jù)庫如何更改數(shù)據(jù)文件位置

    Oracle數(shù)據(jù)庫如何更改數(shù)據(jù)文件位置

    這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫如何更改數(shù)據(jù)文件位置的相關(guān)資料,Oracle數(shù)據(jù)庫的數(shù)據(jù)文件的位置和信息都被記錄在控制文件中,需要的朋友可以參考下
    2023-08-08
  • Oracle收集和查看統(tǒng)計信息的方法

    Oracle收集和查看統(tǒng)計信息的方法

    統(tǒng)計信息主要是描述數(shù)據(jù)庫中表,索引的大小,規(guī)模,數(shù)據(jù)分布狀況等的一類信息,下面這篇文章主要給大家介紹了關(guān)于Oracle收集和查看統(tǒng)計信息的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Oracle停止數(shù)據(jù)泵導(dǎo)入數(shù)據(jù)的方法詳解

    Oracle停止數(shù)據(jù)泵導(dǎo)入數(shù)據(jù)的方法詳解

    Oracle數(shù)據(jù)庫在使用的過程中常常會遇到這樣或那樣的問題,而這些問題常常又使我們感到很困惑,下面這篇文章主要給大家介紹了關(guān)于Oracle停止數(shù)據(jù)泵導(dǎo)入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Oracle SQL樹形結(jié)構(gòu)查詢

    Oracle SQL樹形結(jié)構(gòu)查詢

    本文介紹Oracle中使用START WITH...CONNECT BY PRIOR子句實現(xiàn)遞歸查詢樹形結(jié)構(gòu)的方法,小伙伴們可以參考一下。
    2016-05-05
  • Oracle數(shù)據(jù)庫中文顯示???????解決辦法

    Oracle數(shù)據(jù)庫中文顯示???????解決辦法

    這兩天剛剛使用Oracle,出現(xiàn)了好多不愉快的事情,下面分享一下我的一點經(jīng)歷,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中文顯示???????的解決辦法,需要的朋友可以參考下
    2024-04-04

最新評論

高要市| 乳山市| 塔城市| 平江县| 进贤县| 伊川县| 白河县| 华阴市| 大关县| 常德市| 义乌市| 涿鹿县| 藁城市| 德昌县| 临邑县| 莲花县| 迁安市| 固原市| 旅游| 尼玛县| 新化县| 江西省| 五指山市| 汕头市| 高淳县| 昌吉市| 鄂州市| 汤原县| 灵台县| 利辛县| 得荣县| 陵川县| 新兴县| 金华市| 双柏县| 德惠市| 景谷| 博爱县| 达拉特旗| 萨迦县| 二连浩特市|