首頁 > 資料庫 > mysql教程 > 使用Oracle的LISTAGG函數時如何確保不同的值?

使用Oracle的LISTAGG函數時如何確保不同的值?

Mary-Kate Olsen
發布: 2025-01-19 18:26:09
原創
120 人瀏覽過

How Can I Ensure Distinct Values When Using Oracle's LISTAGG Function?

Oracle LISTAGG:產生唯一值的字串

Oracle 的 LISTAGG 函數對於將列值連接成單一字串非常有用。 但是,僅取得聚合字串中的不同值需要特定的方法。本指南示範了有效的方法,避免了對自訂函數或預存程序的需求。

Oracle 19c 及更高版本:直接利用 DISTINCT

對於 Oracle 19c 及後續版本,DISTINCT 關鍵字可以無縫整合在 LISTAGG 函數本身:

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

Oracle 18c 及更早版本:使用子查詢

在較舊的 Oracle 版本(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>
登入後複製

合併多個欄位

以下查詢擴展了功能以包含多個列,演示了適用於更複雜場景的強大方法:

<code class="language-sql">SELECT DISTINCT col1, listagg(col2, ',') OVER (PARTITION BY col1 ORDER BY col2) AS col2_list
FROM table_name
WHERE RN = 1
GROUP BY col1
ORDER BY col1;</code>
登入後複製

總之,使用 DISTINCT 關鍵字(19c 及以上)或子查詢(18c 及以下),您可以有效產生僅包含唯一值的 LISTAGG 結果。這些技術提供了跨不同 Oracle 版本的靈活性,並有助於在需要時包含多個欄位。

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

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