Съдържание
Обобщените функции са много полезен тип функция в бази данни, въпреки че повечето се справят с основните ANSI-SQL функции като MIN (), MAX (), AVG (), SUM (), COUNT ().В PostgreSQL имаме възможност да създадем свои собствени съвкупни функции, така че да можем да кажем, че PostgreSQL е една от най -персонализираните бази данни на пазара.
Както при функциите от други типове, агрегатите могат да бъдат написани на други езици, които се поддържат от PostgreSQL.
Изградете агрегирана функция
Както споменахме в началото, можем да напишем обобщените функции на почти всеки език, включително SQL, тези функции обикновено се състоят от една или повече функции, те трябва да имат поне една функция за преход на състоянието, за да извършват изчисленията, и незадължителни функции за обработка на първоначално и крайно състояние, дори можем да използваме различни езици за всяка от тези функции, например функцията a в PL / pgSQL и функцията b в PL / Pythonи т.н.
Нека да видим структурата, която трябва да следва агрегираната функция:
CREATE AGGREGATE myagg (datatype_of_input) (SFUNC = име на_състояние_функция, STYPE = състояние_тип, FINALFUNC = окончателно_функционално_име, INITCOND = незадължително_init_state_value);
Когато крайната функция е незадължителна, обаче, ако я посочим, тя трябва да приема като вход или вход резултата от функцията за състояние. Тази функция на състоянието винаги приема като вход тип данни и резултат от последното извикване на функцията за състояние; агрегираните функции могат да бъдат и много колони.
Въпреки че функциите, които могат да се използват и създават, са доста прости, можем да проявим креативност и да направим истински произведения на изкуството, които носят сложност.
Ще изпълним функция за геометрична средна стойност, за да демонстрираме способността на PostgreSQL при изпълнение на по -сложни съвкупни функции.
За тази функция, която ще направим, ще използваме две функции, едната, която ще бъде функцията на състоянието, която ще добави данните към дневник, и експоненциален финал, който ще преобразува дневниците отново.
Нека видим на следното изображение функцията за състояние:
Тази функция за преход на състояние получава два параметъра на предишното състояние като едноизмерен масив с два елемента, а също и следващия елемент в процеса на агрегиране, ако елементът е нулев или нулев, функцията на състоянието ще се върне към предишното състояние, от друг form ще върне масив, където първият елемент е логаритмичната сума, а вторият е текущият брой.
В следната функция ще вземем сумата от функцията на състоянието и ще я разделим на броя:
Тъй като имаме нашите функции, които извършват всички изчисления, ще съберем двете части заедно, за да генерираме нашата агрегирана функция:
Увеличете
Както видяхме, реализацията на агрегираната функция беше доста проста, разбира се логиката зад нея не е толкова проста, но по този начин виждаме колко пълна е поддръжката на PostgreSQL на тези нива. Можехме да използваме други езици без проблем.С това приключваме този урок, вече имаме по -широки познания за функциите в PostgreSQL и по този начин можем да разширим нашата база данни до нови нива, което ще направи нашите приложения много по -стабилни и функционални.