конкатинация и group by

Подскажите пожалуйста кто нибудь:
Допустим есть результат запроса:
id|usluga
1|интернет
1|телефон
2|интернет
нужно что бы получилось:
id|usluga
1|интернет,телефон
2|интернет
функции CONCAT на сколько я понял у postgresql нет

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Есть: http://postgresql.ru.ne

Есть:
http://postgresql.ru.net/manual/functions-string.html
первая же функция в таблице

Это просто конкатинаяция, с

Это просто конкатинаяция, с group by она неработает.
Мне пришлось написать собственную агрегантую функцию.
Если кому нибудь нужно могу выложить.

я думаю такой вариант будет

я думаю такой вариант будет работать быстрее, чем Ваша агрегантная функция.

SELECT count (id), name||' '||description
 FROM TABLE
GROUP BY 2. 

А код выкладывайте, может действитеьно кому-то пригодится.

Функция: CREATE FUNCTION

Функция:
CREATE FUNCTION concat(char,char) RETURNS CHAR AS '
SELECT
CASE WHEN $1 = \'\' or $1 IS NULL THEN
CASE WHEN $2=\'\' OR $2 IS NULL THEN
\'\'
ELSE
$2
END
ELSE
CASE WHEN $2=\'\' OR $2 IS NULL THEN
$1
ELSE
$1 ||''; ''|| $2
END
END
' LANGUAGE SQL;
Агрегируем:
create aggregate concat(basetype = char, sfunc = concat, stype = char, initcond = '' );
Сам запрос:
SELECT
public.tabel.key,
public.tabel.kvartira,
public.tabel.brigada,
public.cabel.dat,
concat(public.uslugi.dat) AS cr,
public.tabel.date1,
public.tabel.avtor
FROM
public.temp_key_uslugi
INNER JOIN public.tabel ON (public.temp_key_uslugi.key_tabel = public.tabel.key)
INNER JOIN public.cabel ON (public.tabel.kabel = public.cabel.key)
INNER JOIN public.uslugi ON (public.temp_key_uslugi.key_usluga = public.uslugi.key)
INNER JOIN public.raion ON (public.tabel.raion = public.raion.n)
GROUP BY
public.tabel.key,
public.tabel.kvartira,
public.tabel.brigada,
public.cabel.dat,
public.tabel.date1,
public.tabel.avtor
ORDER BY
public.tabel.key

Что бы вариант который вы предлогаете подошел нужно колдавать с вложенным запрсом. А вот увеличет это скорость работы.....

Судя по тому как используется

Судя по тому как используется функция в запросе, предлагаю посмотреть еще функцию coalesce.

Используйте array_agg()

попробуйте так:

SELECT  id, array_to_string(array_agg(usluga), ',')
FROM your_table
GROUP BY id

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023