Oracle selecciona distintos duplicados de fusión [duplicado]

Dec 01 2020

Tengo una tabla simple en mi base de datos que se ve así

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

Como puede ver, los datos no son los mejores y hay categorías duplicadas con diferentes category_ids. Mi objetivo es obtener un resultado en el que cada categoría se produzca una vez y, si hay varios identificadores para el mismo nombre de categoría, fusionarlos (separados por comas o algo así). Entonces, para el ejemplo, el resultado debería verse así

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

¿Cómo puedo archivar ese resultado? Mi consulta actual se ve así

select distinct category, category_id 
from my_table
order by 1;

No tengo ni idea de cómo archivar este tipo de fusión con una declaración distinta. ¿Es la declaración distinta el enfoque correcto o debería usar otro?

Respuestas

2 ThorstenKettner Dec 01 2020 at 16:13

Tienes razón; un ID de categoría debe representar una categoría, por lo que dicha tabla no debe contener la misma categoría dos veces (con dos ID diferentes). La tabla carece de una restricción única sobre la categoría.

Desea ver los datos representados de manera diferente, lo que puede lograr con la agregación:

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

Usar group byy listagggustar

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

ver violín