Oracle seleciona duplicatas de mesclagem distintas [duplicata]
Eu tenho uma tabela simples em meu banco de dados que se parece com esta
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
Como você pode ver, os dados não são os melhores e existem categorias duplicadas com diferentes category_ids. Meu objetivo é obter um resultado em que cada categoria ocorra uma vez e, se houver vários ids para o mesmo nome de categoria, mescle-os (separados por vírgula ou sth. Assim). Portanto, para o exemplo, o resultado deve ser semelhante a este
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
Como posso arquivar esse resultado. Minha consulta atual se parece com isto
select distinct category, category_id
from my_table
order by 1;
Não tenho absolutamente nenhuma ideia de como arquivar esse tipo de mesclagem com uma declaração distinta. A declaração distinta é a abordagem certa ou devo usar outra?
Respostas
Você está certo; um ID de categoria deve representar uma categoria, portanto, tal tabela não deve conter a mesma categoria duas vezes (com dois IDs diferentes). A tabela carece de uma restrição única na categoria.
Você deseja ver os dados representados de maneira diferente, o que pode ser obtido com a agregação:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
Use group by
e listagg
curta
select category, listagg(category_id, ',') category_id
from my_table
group by category
ver violino