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

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

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

一、簡(jiǎn)介

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

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

二、方法

首先還原listagg聚合之后出現(xiàn)重復(fù)數(shù)據(jù)的現(xiàn)象,打開(kāi)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

運(yùn)行結(jié)果:

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

【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聚合之后沒(méi)有出現(xiàn)重復(fù)數(shù)據(jù)了。oracle官方不太推薦使用wm_concat()來(lái)進(jìn)行聚合,能盡量使用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去重問(wèn)題如果拼接的字符串太長(zhǎng)會(huì)報(bào)oracle超過(guò)最大長(zhǎng)度的錯(cuò)誤,只適用于數(shù)據(jù)量比較小的場(chǎng)景。

【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ù)去重之后再進(jìn)行聚合處理。

三、總結(jié)

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

相關(guān)文章

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

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

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

    oracle12C安裝步驟(圖文詳解)

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

    Oracle的約束介紹與約束維護(hù)

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

    Oracle使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn)的實(shí)例代碼

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

    Oracle Listener 動(dòng)態(tài)注冊(cè) 與 靜態(tài)注冊(cè)

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

石门县| 台东市| 迁安市| 梁平县| 山阳县| 巫山县| 菏泽市| 南汇区| 吴桥县| 南投县| 同仁县| 丰宁| 康定县| 孝昌县| 铁岭市| 武山县| 通海县| 安溪县| 本溪市| 四川省| 吉林市| 县级市| 梅州市| 芮城县| 耒阳市| 承德市| 澄迈县| 新宾| 平湖市| 威远县| 汽车| 辉县市| 澄江县| 康乐县| 清苑县| 阜阳市| 义马市| 巴中市| 区。| 井陉县| 龙江县|