sql - Oracle 选择不同的合并重复项
问题描述
我的数据库中有一个简单的表,看起来像这样
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
如您所见,数据不是最好的,并且存在具有不同 category_id 的重复类别。我的目标是获得一个结果,其中每个类别出现一次,并且如果同一类别名称有多个 id 合并它们(逗号分隔或类似的东西)。所以对于这个例子,结果应该是这样的
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
我怎样才能存档该结果。我当前的查询看起来像这样
select distinct category, category_id
from my_table
order by 1;
我完全不知道如何用不同的语句归档这种合并。不同的陈述是正确的方法还是我应该使用另一种?
解决方案
你说的对; 一个类别 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;
推荐阅读
- java - 同步方法没有按我预期的那样工作
- php - 在 Symfony 2.3 控制器中访问 POST 请求的 JSON 正文
- python - 从命令提示符调用时,Python 脚本中的 Numpy 无法导入
- git - 有什么方法可以在 git diff 中设置 vim 的颜色列?
- python - 使用 Python 尽可能快地从 Madhava–Leibniz 系列中获得子序列
- c++ - 如何在两个线程之间共享公共资源?
- purescript - 如何直接通过类型构造函数在 Purescript 中创建效果?
- ruby-on-rails - 使用 Activerecord-sqlserver-adapter 的 Activerecord 返回对象列表但没有任何属性
- angular - ngx-datatable angular6中组行标题中的多列
- html - 超过父 div 时,HTML 在新行中显示子 div