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

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

Susan Sarandon
Susan Sarandon原創
2025-01-19 18:06:13186瀏覽

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

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