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 bylistagg좋아요

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

바이올린 참조