Oracle select 个不同的合并重复项
Oracle select distinct merge duplicates
我的数据库中有一个简单的 table,看起来像这样
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
如您所见,数据不是最好的,并且存在具有不同 category_ids 的重复类别。我的目标是得到一个结果,其中每个类别出现一次,如果同一类别名称有多个 ID,则将它们合并(以逗号分隔或类似的方式)。所以对于这个例子,结果应该是这样的
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
我怎样才能存档那个结果。我当前的查询如下所示
select distinct category, category_id
from my_table
order by 1;
我完全不知道如何使用不同的语句来归档这种合并。 distinct 语句是正确的方法还是我应该使用另一种方法?
像
一样使用group by
和listagg
select category, listagg(category_id, ',') category_id
from my_table
group by category
你是对的;一个类别 ID 应该代表一个类别,所以这样的 table 不应该包含相同的类别两次(有两个不同的 ID)。 table 缺少对类别的唯一约束。
您想查看以不同方式表示的数据,这可以通过聚合实现:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
我的数据库中有一个简单的 table,看起来像这样
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
如您所见,数据不是最好的,并且存在具有不同 category_ids 的重复类别。我的目标是得到一个结果,其中每个类别出现一次,如果同一类别名称有多个 ID,则将它们合并(以逗号分隔或类似的方式)。所以对于这个例子,结果应该是这样的
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
我怎样才能存档那个结果。我当前的查询如下所示
select distinct category, category_id
from my_table
order by 1;
我完全不知道如何使用不同的语句来归档这种合并。 distinct 语句是正确的方法还是我应该使用另一种方法?
像
一样使用group by
和listagg
select category, listagg(category_id, ',') category_id
from my_table
group by category
你是对的;一个类别 ID 应该代表一个类别,所以这样的 table 不应该包含相同的类别两次(有两个不同的 ID)。 table 缺少对类别的唯一约束。
您想查看以不同方式表示的数据,这可以通过聚合实现:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;