Tuesday, October 4, 2016

Bewegende Gemiddelde Sql Oracle

Bewegende gemiddelde in T-SQL n gemeenskaplike berekening tendens analise is die bewegende (of rollende) gemiddelde. 'N bewegende gemiddelde is die gemiddeld van die byvoorbeeld laaste 10 rye. Die bewegende gemiddelde wys 'n meer gladde kurwe as die werklike waardes, meer so met 'n langer tydperk vir die bewegende gemiddelde, maak dit 'n goeie hulpmiddel vir tendens analise. Hierdie blog post sal wys hoe om te bereken bewegende gemiddelde in T-SQL. Verskillende metodes sal gebruik word, afhangende van die weergawe van SQL Server. Die onderstaande grafiek toon die smoothing effek (rooi lyn) met 'n 200 dae bewegende gemiddelde. Die voorraadkwotasies is die blou lyn. Die langtermyn tendens is duidelik sigbaar. T-SQL Moving Avergage 200 dae onderstaande demonstrasie vereis die TAdb databasis wat geskep kan word met die script hier geleë. In die komende voorbeeld sal ons 'n bewegende gemiddelde te bereken vir die afgelope 20 dae. Afhangende van die weergawe van SQL Server, sal daar 'n ander metode om die berekening te doen. En, soos ons later sal sien, die nuwer weergawes van SQL Server het funksies in staat stel 'n baie meer doeltreffende berekening. SQL Server 2012 en later Moving Gemiddelde Hierdie weergawe maak gebruik van 'n totaal venster funksie. Wat is nuut in SQL 2012 is die moontlikheid om die grootte van die venster beperk deur hoeveel rye voor die venster moet bevat: Rye voorafgaande is 19, want ons het die huidige ry sowel in die berekening in te sluit. Soos jy kan sien, die berekening van bewegende gemiddelde in SQL Server 2012 is redelik eenvoudig. Die onderstaande figuur toon die windows beginsel. Huidige ry gemerk met 'n geel. Die venster is gemerk met 'n blou agtergrond. Die bewegende gemiddelde is eenvoudig die gemiddelde van QuoteClose in die blou lyne: T-SQL Moving gemiddelde venster. Die resultate van die berekeninge in ouer weergawes van SQL Server is dieselfde, so hulle sal nie weer gewys word. SQL Server 2005 8211 2008R2 Moving Gemiddelde Hierdie weergawe maak gebruik van 'n gemeenskaplike tafel uitdrukking. Die CTE is self gekla tot die laaste 20 rye vir elke ry te kry: Moving Gemiddelde voor SQL Server 2005 Die pre 2005 weergawe sal 'n links buitenste gebruik te sluit om dieselfde tafel met die laaste 20 rye te kry. Die buitenste tafel kan gesê word dat die venster wat ons wil 'n gemiddelde op te bereken bevat: Performance Vergelijking As ons die drie verskillende metodes gelyktydig hardloop en gaan die gevolglike uitvoering plan, daar is 'n dramatiese verskil in prestasie tussen die metodes: Vergelijking van drie verskillende metodes te bereken bewegende gemiddelde Soos jy kan sien, die windows funksie verbeterings in SQL 2012 maak 'n groot verskil in prestasie. Gebruik Soos in die begin van hierdie post, is bewegende gemiddeldes gebruik as 'n instrument om tendense te illustreer. 'N Algemene benadering is om bewegende gemiddeldes van verskillende lengtes te kombineer, ten einde veranderinge in die kort-, medium - en langtermyn tendense onderskeidelik te sien. Van besondere belang is die kruising van die tendens lyne. Byvoorbeeld, wanneer die kort tendens oor die lang of medium tendens beweeg, dit kan geïnterpreteer word as 'n koopsein in tegniese ontleding. En toe die kort tendens beweeg onder 'n langer tendens lyn, kan dit vertolk word as 'n sell sein. Die onderstaande grafiek toon Kwotasies, Ma20, Ma50 en Ma200. T-SQL Ma20, Ma50, Ma200 koop en verkoop seine. Hierdie blog post is deel van 'n reeks oor tegniese ontleding, TA, in SQL Server. Sien die ander poste hier. Geplaas deur Tomas LindRolling Gemiddeld met Oracle analitiese funksies Hierdie klein voorbeeld sal demonstreer hoe om Orakels gebruik analitiese funksies van die rollende gemiddelde te kry. Eerstens moet jy om te skep en laai 'n tafel wat elkeen maande gemiddelde temprature in Edinburgh in die jare 1764-1820 bevat. Die script om dit te doen kan hier gevind word. Na die invul van hierdie tabel, gebruik hierdie stelling om die gemiddelde temperatuur oor die afgelope 12 maande vind vir elke maand in die resultaat stel: Die (verkort) gevolg is: Die tweede en derde kolomme is die maand en jaar. Die eerste kolom is die gemiddelde temperatuur vir hierdie maand het die laaste kolom is die gemiddelde van die huidige en afgelope 11 maande gemiddeld temperatures. AVG (Transact-SQL) ALLE Pas die totale funksie om alle waardes. Alles is die verstek. DISTINCT dui daarop dat, AVG uitgevoer word slegs op elke unieke geval van 'n waarde, ongeag hoeveel keer die waarde voorkom. uitdrukking is 'n uitdrukking van die presiese numeriese of geskatte numeriese data tipe kategorie, behalwe vir die tipe bietjie data. Totaal funksies en subqueries is nie toegelaat nie. OOR (partitionbyclause orderbyclause) partitionbyclause verdeel die resultaat stel wat deur die VANAF klousule in mure waaraan die funksie toegepas word. As nie gespesifiseer, die funksie behandel alle rye van die navraag gevolg gestel as 'n enkele groep. orderbyclause bepaal die logiese volgorde waarin die operasie uitgevoer word. orderbyclause word vereis. Vir meer inligting, sien OOR klousule (Transact-SQL). Die tipe terugkeer word bepaal deur die tipe van die geëvalueer gevolg van uitdrukking. desimale kategorie (p, s) As die tipe data van uitdrukking is 'n alias data tipe, die soort opbrengs is ook van die tipe alias data. Maar, as die tipe basis data van die alias datatipe bevorder, byvoorbeeld uit tinyint om Int. die terugkeer waarde is van die bevorder datatipe en nie die alias datatipe. AVG () bere die gemiddelde van 'n stel waardes wat deur die som van die waardes te deel deur die telling van nonnull waardes. As die som groter as die maksimum waarde vir die tipe data van die terugkeer waarde 'n fout sal teruggestuur word. AVG is 'n deterministiese funksie wanneer dit gebruik word sonder die oor en ORDER BY klousules. Dit is deterministiese wanneer gespesifiseerde met die oor en ORDER BY klousules. Vir meer inligting, sien Deterministiese en deterministiese funksies. A. Die gebruik van die som en AVG funksies vir berekeninge Die volgende voorbeeld word bereken dat die gemiddelde vakansie-ure en die som van siekteverlof ure wat die vise-presidente van Avontuur Werke Cycles gebruik. Elkeen van hierdie totaal funksies produseer 'n enkele opsomming waarde vir al die opgespoor rye. Die voorbeeld gebruik die AdventureWorks2012 database. How 'n SQL bewegende gemiddelde bereken sonder 'n wyser Update: As jy besig is met die nuutste weergawes van SQL Server, kan jy die windows funksies gebruik om dieselfde ding te bewerkstellig. Ek gepos word om die updated kode aan die einde van die post. Om hierdie video, ek nog graag die denkproses van anker om 'n datum. Video: 3 daagse bewegende gemiddelde in SQL 'n doeltreffende manier om 'n bewegende gemiddelde in SQL te bereken met behulp van 'n paar truuks op datum ankers stel. Daar is debatte oor die beste manier om 'n SQL bewegende gemiddelde in SQL Server doen. Sommige mense dink daar is tye wanneer 'n wyser is mees doeltreffende. Ander dink dat jy dit alles kan doen in 'n stel wat gebaseer is weg sonder die wyser. Die ander dag het ek gaan 'n bewegende gemiddelde te bereken en my eerste gedagte was om 'n wyser gebruik. Ek het 'n paar vinnige navorsing en het gevind dat hierdie forum vraag: Moving Gemiddelde in TSQL Daar is 'n pos wat 'n subquery met 'n anker datum te help vind die 1 en 2 dag geneutraliseer toon. Hier is die skrif wat jy kan gebruik om die 3 dag SQL Gemiddeld finale uitslag Moving toets. Hier is die finale navraag. Hier is die vraag wat jy sou gebruik met SQL Server 2012. Deel hierdie: 21 SQL vir ontleding en verslagdoening aan hierdie operasies uit te voer, die analitiese funksies by te voeg 'n paar nuwe elemente te SQL verwerking. Hierdie elemente te bou op bestaande SQL om soepel en kragtige berekening uitdrukkings toelaat. Met net 'n paar uitsonderings, die analitiese funksies het hierdie nuwe elemente. Die verwerking vloei word in Figuur 21-1. Figuur 21-1 Processing Orde Die essensiële konsepte gebruik in analitiese funksies is: navraagverwerking behulp analitiese funksies vind in drie fases. In die eerste plek al aansluit, waar van toepassing. GROEP BY en HAVING klousules uitgevoer. In die tweede plek is die resultaat stel tot beskikking van die analitiese funksies gemaak, en al hulle berekeninge vind plaas. Derdens, as die navraag het 'n bevel deur klousule aan die einde, die ORDER BY verwerk om voorsiening te maak vir akkurate uitset bestel. Die verwerking orde word in Figuur 21-1. Gevolg stel partisies Die analitiese funksies gebruikers in staat stel om navraag gevolg stelle verdeel in groepe van rye genoem mure. Let daarop dat die term partisies gebruik met analitiese funksies is nie verband hou met die funksie tafel partisies. Dwarsdeur hierdie hoofstuk, die term mure verwys alleenlik na die betekenis wat verband hou met analitiese funksies. Partisies geskep na die gedefinieerde met GROUP BY klousules groepe, sodat hulle is beskikbaar vir enige gemiddelde resultate soos somme en gemiddeldes. Partition afdelings kan gebaseer wees op enige gewenste kolomme of uitdrukkings. 'N navraag gevolg stel kan verdeel in net een partisie hou al die rye, 'n paar groot mure, of baie klein mure hou net 'n paar rye elk. Vir elke ry in 'n partisie, kan jy 'n gly venster van data te definieer. Dit venster bepaal die omvang van rye gebruik om die berekeninge te doen vir die huidige ry. Venstergroottes kan gebaseer wees op óf 'n fisiese aantal rye of 'n logiese interval soos tyd. Die venster het 'n begin ry en 'n einde ry. Afhangende van die definisie, kan die venster op een of beide kante beweeg. Byvoorbeeld, sou 'n venster gedefinieer vir 'n kumulatiewe bedrag funksie sy beginspan ry vasgestel op die eerste ry van die verdeling, en sy einde ry sal vanaf die beginpunt skuif al die pad na die laaste ry van die verdeling. In teenstelling, sal 'n venster gedefinieer vir 'n bewegende gemiddelde sowel sy beginspan en eindpunte skyfie het sodat hulle in stand te hou 'n konstante fisiese of logiese reeks. 'N Venster kan so groot soos al die rye in 'n partisie of net 'n gly venster van een ry binne 'n partisie gestel. Wanneer 'n venster naby 'n grens, die funksie gee terug resultate vir net die beskikbare rye, eerder as om jou te waarsku dat die resultate is nie wat jy wil hê. By die gebruik van venster funksies, is die huidige ry ingesluit tydens berekeninge, sodat jy moet net spesifiseer (N -1) wanneer jy te doen het met N items. Elke berekening uitgevoer word met 'n analitiese funksie is gebaseer op 'n huidige ry binne 'n partisie. Die huidige ry dien as die verwysingspunt die bepaling van die begin en einde van die venster. Byvoorbeeld, kan 'n gesentreerde bewegende gemiddelde berekening gedefinieer met 'n venster wat die huidige ry inhou, die ses voorafgaande rye, en die volgende ses rye. Dit sou 'n gly venster van 13 rye te skep, soos getoon in Figuur 21-2. Figuur 21-2 gly venster Voorbeeld Ranking Funksies A posisie funksie bere die rang van 'n rekord in vergelyking met ander rekords in die datastel gebaseer op die waardes van 'n stel maatreëls. Die tipes posisie funksie is: Voorbeeld lineêre regressie berekening in hierdie voorbeeld, ons bereken 'n gewone-minste-regressielyn wat die verkoop van 'n produk as 'n lineêre funksie van die produkte lys prys hoeveelheid druk. Die berekeninge is gegroepeer deur verkope kanaal. Die waardes helling. INTCPT. RSQR is helling, onderskep, en bepaaldheidskoëffisiënt van die regressielyn, onderskeidelik. Die (heelgetal) waarde telling is die aantal produkte in elke kanaal vir wie albei verkoop hoeveelheid en prys lys data is beskikbaar. Lineêre Algebra lineêre algebra is 'n tak van wiskunde met 'n wye verskeidenheid van praktiese toepassings. Baie gebiede het take wat uitgedruk kan word met behulp van lineêre algebra, en hier is 'n paar voorbeelde uit verskeie velde: statistiek (meervoudige lineêre regressie en hoofkomponente-ontleding), data-ontginning (groepering en klassifikasie), bioinformatika (ontleding van microarray data), operasionele navorsing (supply chain en ander optimeringsprobleme), Ekonometrie (ontleding van verbruikers vraag data), en finansies (batetoewysing probleme). Verskeie biblioteke vir lineêre algebra is vrylik beskikbaar vir enigeen om te gebruik. Woorde UTLNLA pakket ontbloot matriks PL / SQL datatipes en wrapper PL / SQL subprogramme vir twee van die gewildste en robuuste van hierdie biblioteke, BLAS en LAPACK. Lineêre algebra hang af van matriks manipulasie. Presterende matriks manipulasie in PL / SQL in die verlede benodig uitvind van 'n matriks verteenwoordiging gebaseer op PL / SQLs moedertaal datatipes en dan skryf matriks manipulasie roetines van nuuts af. Dit vereis aansienlike ontwikkeling moeite en die prestasie van die gevolglike implementering was beperk. As ontwikkelaars verkies om data na eksterne pakkette te stuur vir verwerking eerder as hul eie roetines, heen en weer data-oordrag kan tydrowend wees. Die gebruik van die UTLNLA pakket kan data verblyf binne Oracle, verwyder die ontwikkeling inspanning, en lewer 'n vinnige implementering. Voorbeeld 21-19 Lineêre Algebra Hier is 'n voorbeeld van hoe Orakels lineêre algebra ondersteuning gebruik kan word vir sake-ontleding. Dit roep 'n meervoudige lineêre regressie aansoek gebou met behulp van die UTLNLA pakket. Die meervoudige regressie aansoek geïmplementeer in 'n voorwerp genoem OLSRegression. Let daarop dat voorbeeld lêers vir die OLS Regressie voorwerp kan gevind word in ORACLEHOME / PLSQL / demo. Kyk na die scenario van 'n handelaar die ontleding van die effektiwiteit van die program vir die bemarking. Elkeen van sy winkels ken sy begroting vir bemarking oor die volgende moontlike programme: media advertensies (media), promosies (promo), koeponne (disct), en direkte mailers (dmail). Die regressie-analise bou 'n lineêre verwantskap tussen die bedrag van die verkope wat 'n gemiddelde winkel het in 'n gegewe jaar (verkope) en die besteding aan die vier komponente van die program vir die bemarking. Veronderstel dat die bemarking data gestoor word in die volgende tabel: Dan kan jy die volgende verkope-bemarking lineêre model te bou met behulp van koëffisiënte: Hierdie model geïmplementeer kan word as die volgende siening, wat verwys na die OLS regressie voorwerp: Die gebruik van hierdie siening, 'n bemarking programbestuurder kan 'n analise uit te voer soos is dit verkope-bemarking model redelike vir die jaar 2004 data wat, is die meervoudige korrelasie groter as 'n paar aanvaarbare waarde, sê maar, 0.9 die SQL vir so 'n navraag kan wees soos volg: Jy kan ook los vrae soos wat is die verwagte basislyn omset van 'n winkel sonder enige bemarking programme in 2003 of watter komponent van die program vir die bemarking was die mees doeltreffende in 2004 Dit is 'n dollar toename in watter program wat die grootste verwagte toename in verkope Sien Oracle databasis PL / SQL pakkette en tipes Versoek om meer inligting oor die gebruik van die UTLNLA pakket en lineêre algebra. Gereelde Itemsets In plaas van tel hoeveel keer 'n gegewe gebeurtenis plaasvind (byvoorbeeld, hoe dikwels iemand gekoop melk by die kruideniersware), jy kan dit nuttig vind om te tel hoeveel keer verskeie geleenthede saam voorkom (byvoorbeeld, hoe dikwels iemand gekoop het beide melk en graan saam by die kruidenierswinkel). Jy kan hierdie verskeie geleenthede met behulp van wat 'n gereelde itemset, wat genoem word, soos die naam aandui, 'n versameling van items tel. 'N Paar voorbeelde van itemsets kon al die produkte wat 'n gegewe kliënt gekoop in 'n enkele reis na die kruidenierswinkel (algemeen bekend staan ​​as 'n mark mandjie), die webblaaie wat 'n gebruiker toegang in 'n enkele sessie, of die finansiële dienste wat 'n gegewe wees kliënt gebruik. Die praktiese motivering vir die gebruik van 'n gereelde itemset is om diegene itemsets wat die meeste voorkom vind. As jy 'n kruidenierswinkels punt-van-verkope data te ontleed, kan jy, byvoorbeeld, ontdek dat melk en piesangs is die mees algemeen gekoop denim items. Gereelde itemsets het dus gebruik in sake-intelligensie-omgewings vir baie jare, met die mees algemene een is vir die mark mandjie ontleding in die kleinhandel bedryf. Gereelde itemset berekeninge geïntegreer met die databasis, wat op die top van relasionele tabelle en toeganklik deur middel van SQL. Hierdie integrasie bied die volgende belangrike voordele: Aansoeke wat voorheen staatgemaak op gereelde itemset bedrywighede nou voordeel trek uit aansienlik verbeter prestasie sowel as eenvoudiger implementering. - SQL-gebaseerde programme wat nie voorheen gebruik gereelde itemsets kan nou maklik uitgebrei word om voordeel te trek uit hierdie funksionaliteit. Gereelde itemsets analise is uitgevoer met die PL / SQL pakket DBMSFREQUENTITEMSETS. Sien Oracle databasis PL / SQL pakkette en tipes Versoek om meer inligting. Daarbenewens is daar is 'n voorbeeld van gereelde itemset gebruik in Gereelde itemsets. Ander statistiese funksies Oracle stel 'n stel van SQL statistiese funksies en 'n statistiek pakket, DBMSSTATFUNCS. In hierdie rubriek is 'n paar van die nuwe funksies saam met basiese sintaks. Beskrywende Statistiek Jy kan die volgende beskrywende statistiek te bereken: Mediaan van 'n datastel Jy kan die volgende parametriese statistiek bereken: Spearmans rho koëffisiënt Kendalls TLU-b koëffisiënt Benewens die funksies, hierdie weergawe het 'n nuwe PL / SQL-pakket, DBMSSTATFUNCS. Dit bevat die beskrywende statistiek funksie OPSOMMING saam met funksies om verspreiding gepaste ondersteun. Die opsomming funksie gee 'n opsomming 'n numeriese kolom van 'n tafel met 'n verskeidenheid van beskrywende statistiek. Die vyf verspreiding pas funksies ondersteun normale, uniform, Weibull, Poisson, en eksponensiaalverdelings. WIDTHBUCKET funksie 'n gegewe uitdrukking, die WIDTHBUCKET funksie gee terug Die emmer getal wat die gevolg van hierdie uitdrukking word toegeken nadat dit geëvalueer. Jy kan equiwidth histogramme met hierdie funksie te genereer. Equiwidth histogramme verdeel datastelle in emmers wie interval grootte (hoogste waarde tot laagste waarde) is gelyk. Die aantal rye wat deur elke emmer sal wissel. 'N Verwante funksie, NTILE. skep equiheight emmers. Equiwidth histogramme kan slegs vir numeriese, datum of tipes DATETIME gegenereer. So het die eerste drie parameters moet wees al numeriese uitdrukkings of al datum uitdrukkings. Ander vorme van uitdrukking is nie toegelaat nie. As die eerste parameter is null. die resultaat is NULL. As die tweede of die derde parameter is null. 'n fout boodskap teruggestuur, as 'n NULL waarde enige eindpunt (of enige punt) vir 'n verskeidenheid in 'n datum of numeriese waarde dimensie nie kan dui. Die laaste parameter (aantal emmers) moet 'n numeriese uitdrukking wat evalueer om 'n positiewe heelgetal waarde 0 te wees, NULL. of 'n negatiewe waarde sal lei tot 'n fout. Emmers genommer van 0 tot (n 1). Emmer 0 beklee die telling van waardes minder as die minimum te beperk. Emmer (n 1) hou die telling van waardes groter as of gelyk aan die maksimum gespesifiseerde waarde. WIDTHBUCKET Sintaksis Die WIDTHBUCKET neem vier uitdrukkings as parameters. Die eerste parameter is die uitdrukking dat die equiwidth histogram is vir. Die tweede en derde parameters is uitdrukkings wat die eindpunte van die aanvaarbare reeks dui vir die eerste parameter. Die vierde parameter dui op die aantal emmers. Oorweeg die volgende data van tabel kliënte. wat toon die kredietlimiete van 17 kliënte. Hierdie data is versamel in die bedrag wat in Voorbeeld 21-20 navraag. In die tafel kliënte. die kolom custcreditlimit bevat waardes tussen 1500 en 15000, en ons kan die waardes toewys aan vier equiwidth emmers, genommer van 1 tot 4, deur die gebruik van WIDTHBUCKET (custcreditlimit, 0, 20000, 4). Ideaal elke emmer is 'n geslote-oop interval van die werklike getallelyn, byvoorbeeld, emmer nommer 2 aan tellings tussen 5000,0000 en 9999,9999. soms aangedui 5000, 10000) om aan te dui dat 5000 is ingesluit in die interval en 10.000 uitgesluit. Om waardes te akkommodeer buite die reeks 0, 20000), waardes minder as 0 na 'n aangewese onderloop emmer wat getel 0 toegeken, en waardes groter as of gelyk aan 20,000 is aan 'n aangewese oorloop emmer wat getel 5 (NUM emmers 1 oor die algemeen). Sien Figuur 21-3 vir 'n grafiese illustrasie van hoe die emmers is opgedra. Figuur 21-3 emmer Opdragte Jy kan die grense spesifiseer in die omgekeerde volgorde, byvoorbeeld, WIDTHBUCKET (custcreditlimit. 20000. 0. 4). Wanneer die grense word omgekeer, sal die emmers oop-toe met tussenposes. In hierdie voorbeeld emmer nommer 1 is (15000,20000, emmer nommer 2 is (10000,15000 en emmer nommer 4, is (0, 5000. Die oorloop emmer sal genommer 0 (20000. oneindig), en die onderloop emmer sal genommer 5 (-... oneindig 0 Dit is 'n fout as die parameter emmer telling is 0 of negatiewe Voorbeeld 21-20 WIDTHBUCKET die volgende is g navraag toon die emmer-wennommers vir die kredietlimiete in die kliënte tafel vir beide gevalle waar die grense word in gereelde of omgekeerde volgorde. Ons gebruik 'n verskeidenheid van 0 tot 20,000. gebruiker-gedefinieerde totale funksies Oracle bied 'n fasiliteit vir die skep van jou eie funksies, genaamd die gebruiker-gedefinieerde totale funksies. Hierdie funksies word geskryf in programmeertale soos PL .. / SQL, Java, en C, en kan gebruik word as analitiese funksies of aggregate in gematerialiseerde uitsig Sien Oracle databasis Data Cartridge Ontwikkelaars Gids vir verdere inligting in verband met sintaksis en beperkings Die voordele van hierdie funksies is: hoogs komplekse funksies kan geprogrammeer met behulp van 'n ten volle proses taal. Hoër scalability as ander tegnieke wanneer die gebruiker-gedefinieerde funksies geprogrammeer vir parallelle verwerking. Voorwerp gegee tik kan verwerk. As 'n eenvoudige voorbeeld van 'n gebruiker-gedefinieerde totaal funksie, kyk na die skewe statistiek. Hierdie berekening maatreëls as 'n datastel het 'n skewe verdeling oor die gemiddelde. Dit sal jou vertel as 'n mens stert van die verspreiding is aansienlik groter as die ander. As jy 'n gebruiker-gedefinieerde totale genoem udskew geskep en toegepas op die kredietlimiet data in die vorige voorbeeld, kan die SQL-stelling en resultate soos volg lyk: Voor die bou van gebruiker-gedefinieerde totaal funksies, moet jy oorweeg as jou behoeftes voldoen kan word in gereelde SQL. Baie komplekse berekeninge is moontlik direk in SQL, veral deur die gebruik van die geval uitdrukking. Bly met gereelde SQL sal eenvoudiger ontwikkeling in staat te stel, en baie navraag bedrywighede is reeds goed parallelized in SQL. Selfs die vorige voorbeeld, die skewe statistiek, geskep kan word met behulp van standaard, al is dit 'n lang, SQL. CASE Expressions Oracle ondersteun nou eenvoudig en deursoek CASE state. CASE state is soortgelyk in doel om die DECODE verklaring, maar hulle bied meer buigsaamheid en logiese krag. Hulle is ook makliker om te lees as die tradisionele DECODE state, en bied 'n beter prestasie as well. Hulle word algemeen gebruik wanneer breek kategorieë in emmers soos ouderdom (byvoorbeeld, 20-29, 30-39, en so aan). Die sintaksis vir eenvoudige CASE state is: Eenvoudige CASE uitdrukkings toets of die Expr waarde is gelyk aan die comparisonexpr. Die sintaksis vir deursoek CASE state is: Jy kan enige soort toestand in 'n gesoek CASE uitdrukking, nie net 'n staking toets. Jy kan net 255 argumente en elke WANNEER spesifiseer. DAN paar tel as twee argumente. Om te verhoed dat meer as die perk, kan jy nes CASE uitdrukkings sodat die returnexpr self is 'n geval uitdrukking. Voorbeeld 21-21 CASE Veronderstel jy wil die gemiddelde salaris van alle werknemers in die maatskappy te vind. As 'n werknemer se salaris minder as 2000 is, jy wil die navraag te gebruik 2000 plaas. Sonder 'n case-stelling, kan jy kies om hierdie navraag te skryf soos volg: Let daarop dat hierdie loop teen die HR monster skedule. In hierdie, cat is 'n funksie wat sy insette terug as die insette is groter as 2000, en terug 2000 anders. Die soektog het implikasies prestasie omdat dit nodig het om 'n funksie te roep vir elke ry. Skryf persoonlike funksies kan ook bydra tot die ontwikkeling vrag. Die gebruik van CASE uitdrukkings in die databasis sonder PL / SQL, kan hierdie navraag herskryf word as: die gebruik van 'n saak uitdrukking kan jy verhoed dat die ontwikkeling van persoonlike funksies en kan ook vinniger uit te voer. Voorbeeld 21-22 saak vir Aggregating Onafhanklike Deelversamelings Deur gevalle binne totaal funksies is 'n gerieflike manier om aggregate voer op verskeie deelversamelings van data wanneer 'n gewone GROUP BY nie voldoende. Byvoorbeeld, kan die voorafgaande voorbeeld verskeie AVG kolomme in sy SELECT lys, elk met sy eie saak uitdrukking ingesluit. Ons sou gehad het 'n navraag te vind die gemiddelde salaris vir alle werknemers in die salaris wissel 0-2000 en 2000-5000. Dit sal lyk: Alhoewel hierdie navraag plaas die gemiddeldes van onafhanklike deelversamelings data in aparte kolomme, deur die toevoeging van 'n geval uitdrukking aan die groep DEUR klousule kan ons die gemiddeldes as die rye van 'n enkele kolom vertoon. Die volgende artikel toon die buigsaamheid van hierdie benadering met twee benaderings tot die skep van histogramme met die geval. Die skep van histogramme met die gebruiker gedefinieerde Emmers Jy kan die geval verklaring gebruik wanneer jy wil histogramme met die gebruiker-gedefinieerde emmers (beide in aantal emmers en breedte van elke emmer) verkry. Die volgende is twee voorbeelde van histogramme geskep met die geval stellings. In die eerste voorbeeld is die histogram totale getoon in verskeie kolomme en 'n enkele ry teruggestuur. In die tweede voorbeeld, is die histogram aangedui met 'n etiket kolom en 'n enkele kolom vir totale en verskeie rye terugbesorg. Voorbeeld 21-23 Histogram Voorbeeld 1 Voorbeeld 21-24 Histogram Voorbeeld 2 Data Verdigting vir Verslagdoening Data word gewoonlik gestoor in yl vorm. Dit is, as geen waarde bestaan ​​vir 'n gegewe kombinasie van dimensie waardes, geen ry bestaan ​​in die feit tafel. Maar wil jy dalk die data in digte vorm besigtig, met rye vir die hele kombinasie van dimensie waardes selfs vertoon wanneer daar geen feite data bestaan ​​vir hulle nie. Byvoorbeeld, as 'n produk nie gedurende 'n spesifieke tydperk het verkoop, kan jy nog steeds wil die produk te sien vir daardie tydperk met 'n nul verkoopswaarde langsaan. Daarbenewens kan tydreekse berekeninge mees maklik uitgevoer word wanneer data is dig langs die tydsdimensie. Dit is omdat digte data 'n konsekwente aantal rye vir elke tydperk, wat op sy beurt maak dit maklik om die analitiese windows funksies gebruik met fisiese skyf sal vul. Data verdigting is die proses van die omskakeling yl data in digte form. To die probleem van sparsity oorkom, kan jy 'n afgeskorte buitenste gebruik aan te sluit om die gapings te vul in 'n tydreeks of enige ander dimensie. So 'n deel strek die konvensionele buitenste sluit sintaksis deur die toepassing van die buitenste deel aan elke logiese verdeling omskryf in 'n soektog. Oracle logies partisies die rye in jou soektog gebaseer op die uitdrukking wat jy spesifiseer in die afsluiting met klousule. Die resultaat van 'n afgeskorte buitenste deel is 'n unie van die buitenste sluit van elk van die mure in die logies verdeel tafel met die tafel aan die ander kant van die join. Note dat jy hierdie tipe sluit kan gebruik om die gapings in enige vul dimensie, nie net die tydsdimensie. Die meeste van die voorbeelde hier fokus op die tydsdimensie, want dit is die dimensie mees algemene gebruik as 'n basis vir vergelyking. Partition Sluit Sintaksis Die sintaksis vir Gepartitioneerd buitenste deel strek die ANSI SQL JOIN klousule met die frase afsluiting met gevolg deur 'n lys uitdrukking. Die uitdrukkings in die lys spesifiseer die groep waaraan die buitenste deel is toegepas. Die volgende is die twee vorme van sintaksis wat normaalweg gebruik word vir Gepartitioneerd buitenste sluit: Let daarop dat vol buitenste deel te neem is nie ondersteun met 'n afgeskorte buitenste aan te sluit. Voorbeeld van skraal Data A typi cal situasie met 'n yl dimensie word in die volgende voorbeeld, wat die weeklikse verkope en jaar-tot-datum verkope vir die produk Bounce vir weke 20-30 bere in 2000 en 2001: In hierdie voorbeeld ons sou verwag 22 rye data (11 weke elk van 2 jaar) indien die data was dig. Maar ons kry net 18 rye omdat weke 25 en 26 word vermis in 2000, en weke 26 en 28 in 2001. Die vul gapings in Data Ons die yl data van die vorige navraag kan neem en doen 'n afgeskorte buitenste vat met 'n digte stel tyd data. In die volgende navraag, alias ons oorspronklike navraag as v en ons data van die tye tafel, waarop ons alias as t kies. Hier haal ons 22 rye, want daar is geen gapings in die reeks. Die vier bygevoeg rye elk 0 as hul verkope waarde ingestel op 0 deur die gebruik van die NVL funksie. Let daarop dat in hierdie navraag, 'n WAAR voorwaarde vir weke geplaas tussen 20 en 30 in die inline oog vir die tydsdimensie. Dit is ingestel om die stel klein gevolg hou. Vulsel Gapings in twee dimensies N-dimensionele data is tipies vertoon as 'n digte 2-dimensionele blad kruis van (N - 2) bladsy dimensies. Dit vereis dat alle dimensie waardes vir die twee dimensies wat in die blad kruis ingevul word Die volgende is 'n voorbeeld waar die verdeel buitenste sluit vermoë kan gebruik word vir die gapings te vul op twee dimensies:. In hierdie navraag, die MET subquery factoring klousule v1 som verkope data op die produk, land, en jaarvlak. Hierdie resultaat is yl, maar gebruikers kan wil al land, jaar kombinasies vir elke produk die sien. Om dit te bereik, neem ons elke verdeling van v1 gebaseer op produk waardes en buitenste deel dit op die land dimensie eerste. Dit sal ons in alle waardes van die land vir elke produk gee. Ons neem dan is dit gevolg en verdeel dit op die produk en land waardes en dan die buitenste deel dit op tydsdimensie. Dit sal ons in alle tye waardes vir elke produk en land kombinasie gee. Vulsel Gapings in 'n inventaris tafel inventaris tafel spore tipies hoeveelheid eenhede wat beskikbaar is vir verskillende produkte. Hierdie tabel is yl: dit net winkels 'n ry vir 'n produk wanneer daar 'n gebeurtenis. Vir 'n verkope tafel, die geleentheid is 'n verkoop, en vir die inventaris tafel, die geleentheid is 'n verandering in die hoeveelheid wat beskikbaar is vir 'n produk. Byvoorbeeld, kyk na die volgende voorraad tafel: Die inventaris tafel het nou die volgende rye: Vir verslagdoeleindes, kan gebruikers wil hierdie inventaris data anders sien. Byvoorbeeld, kan hulle wil alle waardes van tyd te sien vir elke produk. Dit kan bereik word deur gebruik te maak Gepartitioneerd buitenste aan te sluit. Behalwe vir die nuwe plaas rye ontbreek tydperke, gebruikers kan wil die waardes te sien vir hoeveelheid eenhede kolom om die leisels by die mees onlangse bestaande tydperk oorgedra word. Laasgenoemde kan tot stand gebring word met behulp van analitiese venster funksie LASTVALUE waarde. Hier is die vraag en die verlangde uitset: Die innerlike navraag bere n Gepartitioneerd buitenste sluit betyds binne elke produk. Die innerlike navraag densifies die data op die tydsdimensie (wat beteken dat die tydsdimensie sal nou 'n ry vir elke dag van die week). Dit sal egter die hoeveelheid meet kolom nulls vir die nuwe bygevoeg rye (sien die uitset in die hoeveelheid kolom in die volgende resultate hê. Die buitenste navraag gebruik die analitiese funksie LASTVALUE. Die toepassing van hierdie funksie afskortings die data per produk en die bevel om die data op die tydsdimensie kolom (timeid). vir elke ry, die funksie vind die laaste nie-nul waarde in die venster te danke aan die opsie IGNOREER NULLS. wat jy kan gebruik met beide LASTVALUE en FIRSTVALUE. Ons sien die verlangde uitset in die kolom repeatedquantity in die volgende afvoer:. Rekenaarkunde datawaardes te vul gapings Voorbeelde is in die vorige artikel illustreer hoe om Gepartitioneerd buitenste gebruik te sluit om gapings te vul in een of meer dimensies egter die gevolg stelle wat deur Gepartitioneerd buitenste deel hê nul waardes vir kolomme wat nie ingesluit is in die afsluiting met lys. Tipies, dit is meet kolomme. Gebruikers kan gebruik maak van analitiese SQL funksies te maak aan diegene nul waardes te vervang met 'n nie-nul waarde. byvoorbeeld, die volgende navraag bere maandelikse totale vir produkte 64MB geheue kaart en DVD-R skyfies (produk-ID's 122 en 136) vir die jaar 2000. Dit maak gebruik van Gepartitioneerd buitenste sluit om data vir al maande verdig. Vir die vermiste maande, dan gebruik die analitiese SQL funksie AVG om die verkope en eenhede te bereken om die gemiddelde van die maande wees wanneer die produk verkoop. As die werk in SQLPlus, sal die volgende twee opdragte draai die kolomopskrifte vir groter leesbaarheid van resultate: Tyd Reeks Berekenings op densified Data Densificatio N is nie net vir verslagdoening doel. Dit stel ook sekere tipes berekeninge, veral, tydreekse berekeninge. Tydreeks berekeninge is makliker wanneer data is dig langs die tydsdimensie. Digte data het 'n konsekwente aantal rye vir elke tydperke wat op sy beurt maak dit maklik om analitiese venster funksies gebruik met fisiese skyf. Om te illustreer, laat ons eers die voorbeeld op te vul gapings in data. en laat voeg 'n analitiese funksie om die soektog. In die volgende verbeterde weergawe, bereken ons weeklikse jaar-tot-datum verkope langs die weeklikse verkope. Die nul waardes wat die verdeel buitenste sluit insetsels in die maak van die tydreeks digte hanteer op die gewone manier: Die som funksie hulle behandel soos 0e. Tydperk tot tydperk Vergelyking vir One Time Level: Voorbeeld Hoe gebruik ons ​​hierdie funksie waardes oor tydperke spesifiek vergelyk, hoe werk ons ​​'n jaar-oor-jaar verkope vergelyking by die week vlak Die volgende navraag opbrengste op dieselfde ry , vir elke produk, die jaar-tot-datum verkope vir elke week van 2001 met dié van 2000. Let daarop dat in hierdie voorbeeld het ons begin met 'n klousule. Dit verbeter leesbaarheid van die navraag en laat ons fokus op die Gepartitioneerd buitenste aan te sluit. As die werk in SQLPlus, sal die volgende opdrag draai die kolomopskrifte vir groter leesbaarheid van resultate: In die VANAF klousule van die geïntegreerde siening densesales. Ons gebruik 'n afgeskorte buitenste deel van die totale oog v en tyd siening t om gapings te vul in die verkope data langs die tydsdimensie. Die uitset van die Gepartitioneerd buitenste aansluit word dan verwerk deur die analitiese funksie som. Na die weeklikse jaar-tot-datum verkope (die kolom weeklyytdsales) bereken. So, die oog densesales bere die jaar-tot-datum verkope data vir elke week, insluitend dié ontbreek in totaal siening is. Die geïntegreerde siening yearoveryearsales bere dan die jaar gelede weeklikse jaar-tot-datum verkope met behulp van die lag funksie. Die LAG funksie gemerk weeklyytdsalesprioryear spesifiseer 'n afsluiting met klousule dat pare rye vir dieselfde week van jare 2000 en 2001 in 'n enkele partisie. Ons het toe verby 'n offset van 1 tot die LAG funksie om die weeklikse jaar kry tot op datum verkope vir die vorige jaar. Die buitenste navraag blok kies data van yearoveryearsales met die toestand jr 2001 en dus die navraag opbrengste, vir elke produk, sy weeklikse jaar-tot-datum verkope in die gespesifiseerde weke van jare 2001 en 2000. Tydperk-tot-periode Vergelyking vir meerdere tyd Vlakke: voorbeeld Terwyl die vorige voorbeeld wys vir ons 'n manier om vergelykings vir 'n enkele keer vlak te skep, sou dit selfs meer wees nuttig om verskeie keer vlakke te hanteer in 'n enkele navraag. Byvoorbeeld, kan ons verkope teenoor die vorige tydperk by die jaar, kwartaal, maand en dag vlakke te vergelyk. Hoe kan ons skep 'n navraag wat 'n jaar-oor-jaar vergelyking van die jaar-tot-datum verkope vir alle vlakke van ons tyd hiërargie Ons sal 'n paar stappe om hierdie taak uit te voer te neem voer. Die doel is 'n enkele navraag met vergelykings op die dag, week, maand, kwartaal, en jaarvlak. Die stappe is soos volg: Ons sal die oog genoem cubeprodtime skep. wat beskik oor 'n hiërargiese kubus van verkope saamgevoeg oor tye en produkte. Dan sal ons 'n uitsig oor die tydsdimensie om te gebruik as 'n voorsprong van die kubus te skep. Die tyd rand, wat 'n volledige stel van datums hou, sal verdeel buitenste by die yl data in die oog cubeprodtime. Ten slotte, vir 'n maksimum prestasie, ons sal 'n bewaarheid siening te skep, mvprodtime. gebou met behulp van dieselfde definisie as cubeprodtime. Vir meer inligting oor hiërargiese blokkies, sien hoofstuk 20, SQL vir Aggregasie in Datapakhuise. Die bewaarheid siening word gedefinieer in Stap 1 in die volgende afdeling. Stap 1 Maak die hiërargiese kubus sien Die bewaarheid siening wat in die volgende kan bestaan ​​reeds in jou stelsel indien nie, skep dit nou. As jy dit moet genereer, kennis dat ons beperk die navraag om slegs twee produkte te verwerk tyd kort te hou: Omdat hierdie siening is beperk tot twee produkte, dit gee net meer as 2200 rye. Let daarop dat die kolom HierarchicalTime bevat string vertoë van tyd uit alle vlakke van die tyd hiërargie. Die saak uitdrukking wat gebruik word vir die kolom HierarchicalTime voeg daar 'n merker (0, 1.) aan elke datum string na die tyd vlak van die waarde dui. A 0 verteenwoordig die jaarvlak 1 is kwartiere, 2 is maande, en 3 is dag. Let daarop dat die GROUP BY klousule is 'n aaneengeskakelde Rollup wat die rollup hiërargie vir die tyd en produk dimensies spesifiseer. Die GROUP BY klousule is wat bepaal die hiërargiese inhoud kubus. Stap 2 Maak die oog edgetime, wat 'n volledige stel van datum waardes edgetime is die bron vir die invul tyd gapings in die hiërargiese kubus met behulp van 'n afgeskorte buitenste aan te sluit. Die HierarchicalTime kolom in edgetime sal gebruik word in 'n afgeskorte deel van die HierarchicalTime kolom in die oog cubeprodtime. Die volgende verklaring definieer edgetime: Stap 3 Skep die bewaarheid oog mvprodtime om vinniger prestasie die bewaarheid oog definisie is 'n duplikaat van die oog cubeprodtime vroeër gedefinieer ondersteun. Omdat dit 'n dubbele navraag, sal verwysings na cubeprodtime herskryf om die mvprodtime gebruik bewaarheid oog. Die volgende bewaarheid kan bestaan ​​reeds in jou stelsel indien nie, skep dit nou. As jy dit moet genereer, moet asseblief daarop let dat ons beperk die navraag om slegs twee produkte te hou die verwerking tyd kort. Stap 4 Skep die vergelyking navraag Ons het nou die weg gebaan vir ons vergelyking navraag stel. Ons kan tydperk tot tydperk vergelyking berekeninge verkry te alle tye vlakke. Dit vereis die toepassing van analitiese funksies van 'n hiërargiese kubus met 'n digte data langs die tydsdimensie. Sommige van die berekeninge wat ons kan bereik vir elke keer vlak is: Som van verkope vir vorige tydperk op alle vlakke van die tyd. Variansie in verkope oor vorige tydperk. Som van verkope in dieselfde tydperk 'n jaar gelede op alle vlakke van die tyd. Variansie in verkope oor dieselfde tydperk verlede jaar. Die volgende voorbeeld voer al vier van hierdie berekeninge. Dit maak gebruik van 'n afgeskorte buitenste deel van die menings cubeprodtime en edgetime om 'n geïntegreerde siening van digte data genoem densecubeprodtime skep. Die soektog gebruik dan die lag funksie op dieselfde manier as die enkel-vlak voorbeeld voor. Die buitenste WAAR klousule spesifiseer tyd op drie vlakke: die dae van Augustus 2001 die hele maand, en die hele derde kwartaal van 2001. Let daarop dat die laaste twee rye van die resultate bevat die maand vlak en kwartaal vlak aggregations. Note wat om te maak Die buitenste SELECT klousule bere die afwykings.


No comments:

Post a Comment