Oracle은 고유 한 병합 중복 항목 선택 [중복]
Dec 01 2020
내 데이터베이스에 다음과 같은 간단한 테이블이 있습니다.
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
보시다시피 데이터가 최고가 아니며 category_id가 다른 중복 카테고리가 있습니다. 내 목표는 각 카테고리가 한 번 발생하는 결과를 얻고 동일한 카테고리 이름에 대해 여러 ID가있는 경우 병합하는 것입니다 (쉼표로 구분되거나 이와 같이 sth.). 예를 들어 결과는 다음과 같아야합니다.
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
그 결과를 어떻게 보관할 수 있습니까? 내 현재 쿼리는 다음과 같습니다.
select distinct category, category_id
from my_table
order by 1;
나는 이런 종류의 병합을 별개의 진술로 보관하는 방법을 전혀 모른다. 고유 한 설명이 올바른 접근 방식입니까, 아니면 다른 설명을 사용해야합니까?
답변
2 ThorstenKettner Dec 01 2020 at 16:13
당신이 옳습니다. 카테고리 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;
1 Dornaut Dec 01 2020 at 16:13
사용 group by
및 listagg
좋아요
select category, listagg(category_id, ',') category_id
from my_table
group by category
바이올린 참조