Oracle memilih duplikat gabungan yang berbeda [duplikat]
Saya memiliki tabel sederhana di database saya yang terlihat seperti ini
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1 |
| bikes | 2 |
| planes | 3 |
| bikes | 4 |
| cars | 5 |
+----------+-------------+
Seperti yang Anda lihat, datanya bukan yang terbaik dan ada kategori duplikat dengan berbagai kategori_id. Tujuan saya adalah untuk mendapatkan hasil di mana setiap kategori terjadi satu kali dan jika ada beberapa id untuk nama kategori yang sama gabungkan mereka (dipisahkan dengan koma atau sth. Seperti itu). Jadi sebagai contoh, hasilnya akan terlihat seperti ini
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars | 1,5 |
| bikes | 2,4 |
| planes | 3 |
+----------+-------------+
Bagaimana saya bisa mengarsipkan hasil itu. Kueri saya saat ini terlihat seperti ini
select distinct category, category_id
from my_table
order by 1;
Saya sama sekali tidak tahu bagaimana mengarsipkan gabungan semacam ini dengan pernyataan yang berbeda. Apakah pernyataan berbeda merupakan pendekatan yang tepat atau haruskah saya menggunakan pernyataan lain?
Jawaban
Kamu benar; ID kategori harus mewakili kategori, jadi tabel seperti itu tidak boleh berisi kategori yang sama dua kali (dengan dua ID berbeda). Tabel tidak memiliki batasan unik pada kategori.
Anda ingin melihat data direpresentasikan secara berbeda, yang dapat Anda capai dengan agregasi:
select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;
Gunakan group by
dan listagg
suka
select category, listagg(category_id, ',') category_id
from my_table
group by category
lihat biola