sql >> Databáze >  >> RDS >> Oracle

LISTAGG v Oracle pro vrácení odlišných hodnot

19c a novější:

select listagg(distinct the_column, ',') within group (order by the_column)
from the_table

18c a starší:

select listagg(the_column, ',') within group (order by the_column)
from (
   select distinct the_column 
   from the_table
) t

Pokud potřebujete více sloupců, něco takového by mohlo být to, co hledáte:

select col1, listagg(col2, ',') within group (order by col2)
from (
  select col1, 
         col2,
         row_number() over (partition by col1, col2 order by col1) as rn
  from foo
  order by col1,col2
)
where rn = 1
group by col1;


  1. JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() v MySQL:Jaký je rozdíl?

  2. je nějaká výhoda pro varchar(500) oproti varchar(8000)?

  3. Znovu uspořádat / resetovat primární klíč automatického zvýšení

  4. Efektivní čtení a import souborů CSV v Oracle PL/SQL