首页 >数据库 >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