首頁 > 資料庫 > mysql教程 > 使用Oracle的LISTAGG函數如何移除重複項?

使用Oracle的LISTAGG函數如何移除重複項?

Barbara Streisand
發布: 2025-01-19 18:12:11
原創
596 人瀏覽過

How Can I Remove Duplicates When Using Oracle's LISTAGG Function?

Oracle LISTAGG:處理重複值以獲得唯一結果

Oracle 的 LISTAGG 函數雖然對於聚合資料功能強大,但本質上並不能刪除重複的條目。 它將所有值(包括重複值)連接成一個字串。 以下是如何實現不同值聚合:

Oracle 19c 及更高版本的方法:

Oracle 19c 及更高版本提供了簡化的解決方案:

<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column)
FROM the_table;</code>
登入後複製

這直接將 DISTINCT 關鍵字合併到 LISTAGG 函數本身。

Oracle 18c 及更早版本的方法:

對於舊版(18c 及以下),需要子查詢:

<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column)
FROM (
  SELECT DISTINCT the_column
  FROM the_table
) t;</code>
登入後複製

這首先只選擇子查詢中的唯一值,然後將 LISTAGG 套用到該結果。

包含多列:

要包含額外的列並保持唯一性,需要更高級的方法:

<code class="language-sql">SELECT col1, LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col2)
FROM (
  SELECT col1, 
         col2,
         ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col1) AS rn
  FROM foo
  ORDER BY col1, col2
)
WHERE rn = 1
GROUP BY col1;</code>
登入後複製

這使用 ROW_NUMBER()col1col2 的每個組合分配唯一的排名。 然後,外部查詢僅選擇每個唯一組合的第一個符合項目 (rn = 1),確保在聚合之前消除重複項。

以上是使用Oracle的LISTAGG函數如何移除重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板