Пользовательские статистические функции (aggregate)

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Пользовательские статистические функции (aggregate)

Сообщение Gera » 13 мар 2008, 14:39

Подскажите пожалуйста, можно ли в FB 2.0 реализовать свои агрегатные функции.

Например CHAR_SUM - конкатенация всех значений столбца в одну строку
и FIRST_NOT_NULL - первое значение не NULL (аналог COALESCE, но для столбца, а не списка).

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 мар 2008, 14:44

Только с помощью хранимой процедуры. Имитировать т.е.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 13 мар 2008, 14:58

т.е. если имеется таблица
COMMENT(
ID_Object INT,
MONTH INT,
DAY INT,
TEXT VARCHAR(100))
и по ней необходимо собрать текст всех комментариев за выбранный месяц, по каждому объекту, то нужно делать курсор по объектам, для каждого выполнить ХП и результаты каждого вызова собрать во временной таблице?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 13 мар 2008, 15:29

Gera писал(а): и по ней необходимо собрать текст всех комментариев за выбранный месяц, по каждому объекту,
что значит собрать? в одну сплошную строку чтоли?

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 13 мар 2008, 15:35

Gera писал(а):Подскажите пожалуйста, можно ли в FB 2.0 реализовать свои агрегатные функции.

Например CHAR_SUM - конкатенация всех значений столбца в одну строку
Да, именно в одну строку

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 мар 2008, 16:12

В FB 2.1 вроде есть функция list.
Хотя, в теме задачи "выбрать все комментарии за месяц", думаю, не проканает. если коммент varchar(100) (кстати, чего так мало), то даже по 1 шт. в сумме уже будет под 3000 символов. А если не один коммент в день, а больше, то ....

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 13 мар 2008, 16:31

Вообще хочется написать собственную агрегатную функцию и подключить ее к базе, аналогично UDF.

Я не знаю можно ли это в принципе.
Может разработчикам FB написать...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 мар 2008, 17:37

Я не знаю можно ли это в принципе.
нет, это невозможно в принципе. Ни в IB ни в FB. И пока вроде как не планируется.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 мар 2008, 18:46

Собственно, и нафиг не нужно, потому как взяв курсор FOR SELECT за нужный конец, делается всё что душа поэта возжелает.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 14 мар 2008, 08:42

Всем спасибо.
Считаю что тему можно закрыть.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 26 мар 2008, 08:33

Свершилось!
в FireBird v2.1 есть новая агрегатная функция LIST подробности здесь
Она возвращает конкатенацию строкового представления группы, с разделителями (по желанию)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 мар 2008, 10:01

я тебе про нее (list) уже писал.

Ответить