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中文网其他相关文章!