【问题标题】:Oracle select distinct merge duplicates [duplicate]Oracle选择不同的合并重复项[重复]
【发布时间】:2020-12-01 09:07:14
【问题描述】:

我的数据库中有一个简单的表,如下所示

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+

如您所见,数据不是最好的,并且存在具有不同 category_id 的重复类别。我的目标是获得一个结果,其中每个类别出现一次,并且如果同一类别名称有多个 id 合并它们(逗号分隔或类似的东西)。所以对于这个例子,结果应该是这样的

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+

如何归档该结果。我当前的查询看起来像这样

select distinct category, category_id 
from my_table
order by 1;

我完全不知道如何用不同的语句归档这种合并。不同的陈述是正确的方法还是应该使用另一种方法?

【问题讨论】:

  • DISTINCT 不能在这里工作,因为 category / category_id 对已经不同了。

标签: sql oracle oracle12c


【解决方案1】:

你是对的;一个类别 ID 应该代表一个类别,因此这样的表不应包含两次相同的类别(具有两个不同的 ID)。该表缺少对类别的唯一约束。

您希望看到以不同方式表示的数据,这可以通过聚合来实现:

select
  category,
  listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;

【讨论】:

    【解决方案2】:

    使用group bylistagg 喜欢

    select category, listagg(category_id, ',') category_id
    from my_table
    group by category
    

    fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 2016-10-22
      • 2012-04-11
      • 2019-04-12
      • 2012-03-08
      • 1970-01-01
      • 2022-10-18
      相关资源
      最近更新 更多