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