Turinys
Suvestinės funkcijos yra labai naudingas funkcijų tipas duomenų bazėse, nors dauguma naudoja pagrindines ANSI-SQL funkcijas, pvz. MIN (), MAX (), AVG (), SUM (), COUNT ().In „PostgreSQL“ mes turime galimybę sukurti savo bendras funkcijas, kad galėtume pasakyti, jog „PostgreSQL“ yra viena labiausiai pritaikomų duomenų bazių rinkoje.
Kaip ir kitų tipų funkcijos, agregatai gali būti parašyti kitomis kalbomis, kurias palaiko „PostgreSQL“.
Sukurkite agregavimo funkciją
Kaip minėjome pradžioje, apibendrintas funkcijas galime rašyti beveik bet kokia kalba, įskaitant SQL, šias funkcijas paprastai sudaro viena ar daugiau funkcijų, jos turi turėti bent vieną būsenos perėjimo funkciją skaičiavimui atlikti ir pasirenkamas funkcijas pradinė ir galutinė būsena, kiekvienai iš šių funkcijų netgi galime naudoti skirtingas kalbas, pavyzdžiui, funkciją PL / pgSQL ir funkcija b in PL / Pythonir kt.
Pažiūrėkime, kokia turi būti agregacijos funkcijos struktūra:
CREATE AGGREGATE myagg (duomenų įvesties duomenų tipas) (SFUNC = būsenos_funkcijos_pavadinimas, STIPAS = būsenos_ tipas, FINALFUNC = galutinis_funkcijos_pavadinimas, INITCOND = neprivaloma_initinė_statinė_vertybė);
Jei galutinė funkcija yra neprivaloma, tačiau jei ją nurodome, ji turi įvesti arba įvesti būsenos funkcijos rezultatą. Ši būsenos funkcija visada įvedama kaip duomenų tipas ir paskutinio būsenos funkcijos iškvietimo rezultatas; suvestinės funkcijos taip pat gali būti kelių stulpelių.
Nors funkcijos, kurias galima naudoti ir sukurti, yra gana paprastos, mes galime būti kūrybingi ir sukurti tikrus meno kūrinius, kurie yra sudėtingi.
Mes ketiname atlikti geometrinę vidutinę funkciją, kad parodytume savo sugebėjimą „PostgreSQL“ atliekant sudėtingesnes agregatines funkcijas.
Šiai funkcijai, kurią atliksime, naudosime dvi funkcijas, vieną būsenos funkciją, kuri pridės duomenis prie žurnalo, ir eksponentinį galutinį, kuris vėl konvertuos žurnalus.
Toliau pateiktame paveikslėlyje pažiūrėkime būsenos funkciją:
Ši būsenos perėjimo funkcija gauna du ankstesnės būsenos parametrus kaip vienmatį masyvą su dviem elementais ir kitą elementą agregavimo procese, jei elementas yra nulis arba nulis, būsenos funkcija grįš į ankstesnę būseną, iš kitos forma grąžins masyvą, kuriame pirmasis elementas yra logaritminė suma, o antrasis - dabartinis skaičius.
Šioje funkcijoje mes paimsime būsenos funkcijos sumą ir padalinsime ją iš skaičiaus:
Kadangi mes turime savo funkcijas, kurios atlieka visus skaičiavimus, mes sujungsime abi dalis, kad sukurtume bendrą funkciją:
DIDELIS
Kaip matėme, agregavimo funkcijos įgyvendinimas buvo gana paprastas, žinoma, logika už jos ribų nėra tokia paprasta, tačiau tokiu būdu matome, kaip visiškai palaikoma „PostgreSQL“ šiuose lygiuose. Galėjome be problemų vartoti kitas kalbas.Baigę šį vadovėlį, jau turime daugiau žinių apie funkcijas „PostgreSQL“ ir tokiu būdu galime išplėsti savo duomenų bazę į naujus lygius, kurie padarys mūsų programas daug patikimesnes ir funkcionalesnes.