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

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

Barbara Streisand
Barbara Streisand原創
2025-01-19 18:12:11595瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn