Някои RDBMS имат GROUP_CONCAT()
функция, която ви позволява да върнете колона на заявка като разделен списък (например списък, разделен със запетая). MySQL и MariaDB са две, които имат такава функция.
PostgreSQL и SQL Server имат подобни функции, наречени STRING_AGG()
.
Oracle, от друга страна, има LISTAGG()
функция, която прави почти същото нещо (а може би и повече).
Така че можете да кажете, че LISTAGG()
е GROUP_CONCAT()
на Oracle еквивалент.
Пример
Ето основен пример, за да демонстрирате как LISTAGG()
на Oracle функция работи:
SELECT LISTAGG(region_name, ',')
FROM regions;
Резултат:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
В този случай уточних, че разделителят е запетая.
Ето какво се случва, когато просто направим заявката без LISTAGG()
функция:
SELECT region_name
FROM regions;
Резултат:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Получаваме четири реда, всеки с отделна стойност, вместо един ред, разделен със запетая, който съдържа всички стойности.
LISTAGG()
функция също така ни позволява да подреждаме резултатите, да връщаме само уникални стойности (чрез DISTINCT
клауза) и още.
Вижте LISTAGG()
Функция в Oracle за още примери.