首頁 >資料庫 >mysql教程 >如何使用 Oracle 的 LISTAGG 函數僅檢索不同的值?

如何使用 Oracle 的 LISTAGG 函數僅檢索不同的值?

Patricia Arquette
Patricia Arquette原創
2025-01-19 18:21:09650瀏覽

How Can I Retrieve Only Distinct Values Using Oracle's LISTAGG Function?

Oracle中使用LISTAGG函數擷取唯一值

Oracle的LISTAGG函數可以連接指定列中的值。但是,當從非唯一列檢索值時,該函數可能會產生重複的結果。

問題:

使用LISTAGG函數,您希望僅從列中檢索唯一值,而不必使用函數或流程。例如,考慮以下表格:

col1 col2
1 2
1 2
1 3
1 4
1 5

當您將LISTAGG應用於col2時,您可能會得到以下結果:[2,2,3,4,5]。目標是消除重複的2,只顯示唯一值。

解:

19c及更高版本:

<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2)
from the_table;</code>

18c及更早版本:

<code class="language-sql">select listagg(col2, ',') within group (order by col2)
from (
   select distinct col2 
   from the_table
) t;</code>

這些查詢在LISTAGG函數中使用DISTINCT關鍵字,以確保只包含唯一值。

附加欄位:

如果您需要與唯一值一起檢索多個列,您可以採用以下方法:

<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>

此查詢為col1和col2的每個組合分配一個唯一的行號,然後為每個col1組選擇第一行。

以上是如何使用 Oracle 的 LISTAGG 函數僅檢索不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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