Oracleは、個別のマージ重複を選択します[重複]
Dec 01 2020
データベースに次のような単純なテーブルがあります
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
ご覧のとおり、データは最適ではなく、category_idsが異なる重複カテゴリがあります。私の目標は、各カテゴリが1回発生し、同じカテゴリ名に複数のIDがある場合は、それらをマージする結果を取得することです(カンマ区切りまたはそのようなもの)。したがって、この例では、結果は次のようになります。
+----------+-------------+
| 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はカテゴリを表す必要があるため、そのようなテーブルに同じカテゴリが2回含まれることはありません(2つの異なる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 by
してlistagg
好き
select category, listagg(category_id, ',') category_id
from my_table
group by category
フィドルを参照してください