Oracle выбирает отдельные дубликаты слияния [дубликат]
У меня есть простая таблица в моей базе данных, которая выглядит так
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
Как видите, данные не самые лучшие и есть повторяющиеся категории с разными category_id. Моя цель - получить результат, в котором каждая категория встречается один раз, и если есть несколько идентификаторов для одного и того же имени категории, объедините их (через запятую или что-то вроде этого). Итак, для примера результат должен выглядеть так
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
Как я могу заархивировать этот результат. Мой текущий запрос выглядит так
select distinct category, category_id
from my_table
order by 1;
Я совершенно не знаю, как заархивировать такое слияние с отдельным заявлением. Правильный ли подход - это четкое изложение или мне следует использовать другое?
Ответы
Ты прав; идентификатор категории должен представлять категорию, поэтому такая таблица не должна содержать одну и ту же категорию дважды (с двумя разными идентификаторами). В таблице отсутствует уникальное ограничение на категорию.
Вы хотите, чтобы данные представлялись по-другому, чего можно добиться с помощью агрегирования:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
Использовать group byи listaggнравится
select category, listagg(category_id, ',') category_id
from my_table
group by category
увидеть скрипку