Oracle memilih duplikat gabungan yang berbeda [duplikat]

Dec 01 2020

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

2 ThorstenKettner Dec 01 2020 at 16:13

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;
1 Dornaut Dec 01 2020 at 16:13

Gunakan group bydan listaggsuka

select category, listagg(category_id, ',') category_id
from my_table
group by category

lihat biola