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