Функция STRING_AGG стр. 2 |
|||||||||||||||||||||||
На предыдущей странице для SQL Server решалась задача вывода отсортированного списка кораблей каждой страны. Приведем здесь примеры решения этой задачи, для некоторых других популярных СУБД. MySQLКак уже упоминалось, в MySQL для этой цели служит функция GROUP_CONCAT:
Результаты:
Как видно по результатам, разделителем списка по умолчанию является запятая. Однако вы можете указать в качестве разделителя любую последовательность символов (а также пустую строку) с помощью необязательного предложения SEPARATOR. В примере ниже используется трехсимвольный разделитель " | ".
PostgreSQLВ PostgreSQL также имеется функция STRING_AGG. Следующее ранее приведенное решение для SQL Server будет работать в PostgreSQL:
Однако для вывода отсортированного списка здесь используется необязательное предложение ORDER BY во втором аргументе функции:
Для тех версий PostgreSQL, которые не поддерживают функцию STRING_AGG, эту задачу можно решить следующим образом:
Здесь функция ARRAY_AGG формирует массив из имен кораблей, упорядочив их по возрастанию. Функция ARRAY_TO_STRING преобразует массив в строку, используя в нашем случае запятую в качестве разделителя элементов массива. Как и для MySQL, в качестве разделителя мы можем использовать любую строку символов. Но здесь разделитель является обязательным элементом, т.е. значения по умолчанию нет. OracleДля Oracle решение похоже на решение для SQL Server, только функция агрегации называется LISTAGG, а не STRING_AGG:
Есть и другие синтаксические отличия. Так, разделитель в LISTAGG, в отличие от STRING_AGG, является необязательным параметром. Если его опустить, выполняется конкатенация строк, т.е. по умолчанию разделителем является пустая строка (''). Зато предложение WITHIN в Oracle является обязательным. "Есть многое на свете, друг Горацио...".
|