首页 > 数据库 > mysql教程 > 使用Oracle的LISTAGG函数如何去除重复项?

使用Oracle的LISTAGG函数如何去除重复项?

Barbara Streisand
发布: 2025-01-19 18:12:11
原创
596 人浏览过

How Can I Remove Duplicates When 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>
登录后复制

这直接将 DISTINCT 关键字合并到 LISTAGG 函数本身中。

Oracle 18c 及更早版本的方法:

对于旧版本(18c 及以下),需要子查询:

<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 应用于该结果。

包括多列:

要包含额外的列并保持唯一性,需要更高级的方法:

<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>
登录后复制

这使用 ROW_NUMBER()col1col2 的每个组合分配唯一的排名。 然后,外部查询仅选择每个唯一组合的第一个匹配项 (rn = 1),确保在聚合之前消除重复项。

以上是使用Oracle的LISTAGG函数如何去除重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板