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

如何使用 Oracle 的 LISTAGG 函數取得不同的值?

Susan Sarandon
發布: 2025-01-19 18:06:13
原創
192 人瀏覽過

How Can I Get Distinct Values 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>
登入後複製

這直接聚合不同的值,提供了一種簡潔有效的方法。

Oracle 18c 及更早版本:

對於較舊的 Oracle 版本,需要子查詢:

<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 之前建立一個僅包含不同值的臨時表 (t)。

處理多列:

要在唯一 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>
登入後複製

這可確保每個唯一的 col2 值與其對應的 col1 值正確配對,從而提供更完整的結果集。

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

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