国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:239日期:2023-03-12 15:25:40
目錄
  • 一、簡(jiǎn)介
  • 二、方法
    • 【a】 第一種方法
    • 【b】第二種方法
    • 【c】第三種方法
  • 三、總結(jié)

    一、簡(jiǎn)介

    最近在工作中,在寫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)象,打開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é)和見解,僅供大家學(xué)習(xí)參考,希望能對(duì)大家有所幫助。也希望大家多多支持。

    標(biāo)簽: Oracle
    主站蜘蛛池模板: 日韩色视频一区二区三区亚洲 | jul-179在线中文字幕 | 国产一区曰韩二区欧美三区 | 日本特黄a级高清免费酷网 日本特黄特色 | 亚洲精品成人一区二区www | 欧美一区二区视频在线观看 | 日本免费一区二区三区毛片 | japanese日本tube色系 | 香港日本韩国三级网站 | 大学生一级一片第一次欧美 | 无遮挡一级毛片私人影院 | 亚洲精品久久一区影院 | jiz欧美高清| 欧美成人国产一区二区 | 久草在线视频看看 | 美女一级ba大片免色野外 | 毛片免费的 | 99精品国产成人一区二区在线 | 91在线精品亚洲一区二区 | 国产精品视频99 | 欧美一级毛片欧美一级成人毛片 | 91精品成人免费国产片 | 亚洲欧美日韩国产一区二区精品 | 91人碰 | 免费成人高清视频 | 欧美午夜在线观看理论片 | 国产原创一区二区 | 中国一级毛片在线观看 | 成年女人毛片免费观看97 | 精品一区二区三区视频在线观看 | 亚洲99久久久久综合 | 一级做a爱片特黄在线观看免费看 | 精品免费久久久久久久 | 欧美日韩一区二区三区免费不卡 | 亚洲男人的天堂久久无 | 国产毛片基地 | 91久久香蕉国产线看观看软件 | 国产一区二区三区成人久久片 | 美国一级毛片视频 | 亚洲欧美日韩在线一区 | 日本a级毛片视频播放 |