analyyttiset funktiokäsitteet standardissa SQL
analyyttinen funktio laskee arvot riviryhmälle ja palauttaa yhden tuloksen jokaiselta riviltä. Tämä eroaa aggregaattifunktiosta, joka palauttaa yhden tuloksen riviryhmälle.
analyyttiseen funktioon kuuluu OVER lauseke, joka määrittelee arvioitavan rivin ympärillä olevan rivien ikkunan. Kullekin riville analyyttinen funktio resultisoidaan käyttäen valittua rivien ikkunaa syötteenä, possiblykeing aggregation.
analyyttisillä funktioilla voi laskea liukuvia keskiarvoja, asettaa kohteita paremmuusjärjestykseen, laskea laskennallisia summia ja tehdä muita analyysejä.
seuraavia funktioita voidaan käyttää analyyttisinä funktioina:navigointifunktiot,numerointifunktiot ja aggregaattifunktiot
analyyttisten funktioiden syntaksi
analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }window_specification: ] ] window_frame_clause: { rows_range } { frame_start | frame_between }rows_range: { ROWS | RANGE }
Notaatiosäännöt
- hakasulkeet ”” ilmoitetaan valinnaiset lausekkeet.
 - suluissa ”( )” merkitään kirjaimellisia sulkeita.
 - pystypalkki ” / ” ilmaisee loogista tai.
 - kiharaiset henkselit ”{ }” sulkevat sisäänsä joukon vaihtoehtoja.
 - pilkku, jota seuraa hakasulkeissa oleva ellipsis””, osoittaa, että edellinen kohta voi toistua pilkulla erotetussa luettelossa.
 
kuvaus
analyyttinen funktio laskee tulokset riviryhmän yli. Analyyttisen funktion voi rakentaa seuraavalla syntaksilla:
-  
analytic_function_name: funktio, joka suorittaa analyyttisen operaation.Esimerkiksi numerointifunktiotaRANK()voidaan käyttää tässä. -  
argument_list: analyyttiselle funktiolle ominaisia argumentteja.Joissakin toiminnoissa niitä on, joissakin ei. -  
OVER: analyyttisen funktion syntaksin vaatima AvainsanaOVERlauseke. -  
over_clause: viittaa ikkunaan, joka määrittelee taulukon riviryhmän, jonka päällä käytetään analyyttistä funktiota. -  
window_specification: määrittelee ikkunan TEKNISET TIEDOT. -  
window_frame_clause: määrittelee ikkunan kehyksen. -  
rows_range: määrittelee ikkunakehyksen fyysiset rivit tai alogisen alueen. 
toteaa
analyyttinen funktio voi esiintyä skalaarisena lausekkeena operandina kahdessa paikassa kyselyssä:
- 
SELECTlista. Jos analyyttinen funktio esiintyySELECT– luettelossa, sen argumenttiluettelo jaOVER– lauseke eivät voi viitata samassa luettelossa esitettyihin peitenimiin. - 
ORDER BYlauseke. Jos analyyttinen funktio esiintyy kyselynORDER BYlausekkeessa, sen argumenttiluettelo voi viitataSELECTlist-aliaksiin. 
analyyttinen funktio ei voi viitata toiseen analyyttiseen funktioon argumenttiluettelossaan tai sen OVER lausekkeessa edes epäsuorasti aliaksen kautta.
analyyttinen funktio arvioidaan aggregoinnin jälkeen. EsimerkiksiGROUP BY lauseke ja ei-analyyttiset aggregaattifunktiot arvioidaan ensin.Koska aggregaattifunktiot arvioidaan ennen analyyttisiä funktioita, voidaan aggregaattifunktioita käyttää analyyttisten funktioiden syöttöoperandeina.
palauttaa
yhden tuloksen jokaiselle syötteen riville.
Ylilausekkeen määrittely
analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }
kuvaus
OVER lauseke viittaa ikkunaan, joka määrittelee taulukon riviryhmän, jossa käytetään analyyttistä funktiota. Voit antaanamed_window, joka on määritelty kyselyssäsi, tai voit määritellä uuden ikkunan TEKNISET TIEDOT.
huomautuksia
Jos nimettyä ikkuna-eikä ikkunamääritystä ei ole annettu, allinput-rivit sisällytetään ikkunaan jokaiselle riville.
esimerkit käyttäen OVER lauseke
nämä kyselyt käyttävät ikkunamäärityksiä:
- laskee kokonaissumman
 - laskee kumulatiivisen summan
 - laskee liukuvan keskiarvon
 - laskee kohteiden määrän vaihteluvälillä
 - saa suosituimman kohteen kussakin kategoriassa
 - saavat viimeisen arvon alueella
 - lasketaan sijoitus
 
nämä kyselyt käyttävät nimettyä ikkunaa:
- Hanki viimeinen arvo alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
määrittelemällä ikkunan spesifikaatio
window_specification: ] ] 
kuvaus
määrittelee ikkunan spesifikaatiot.
-  
named_window: olemassa olevan ikkunan nimi, joka oli määriteltyWINDOWlausekkeella. 
PARTITION BY: hajottaa tulorivit erillisiksi osioiksi, joiden yli analyyttinen funktio arvioidaan itsenäisesti.
- Moniosoituslausekkeet sallitaan 
PARTITION BYlausekkeessa. - lauseke ei voi sisältää liukulukutyyppejä, ryhmittelemättömiä tyyppejä,vakioita tai analyyttisiä funktioita.
 - Jos tätä valinnaista lauseketta ei käytetä, kaikki rivit syötettävässä pöytälaatikossa muodostavat yhden osion.
 
ORDER BY: määrittelee, miten rivit järjestyvät osion sisällä.Tämä lauseke on valinnainen useimmissa tilanteissa, mutta sitä vaaditaan joissakin tapauksissa navigointitoimintoja varten.window_frame_clause: Aggregaatti analyticfunctions, määrittelee ikkunan kehyksen nykyisen osion.Ikkunakehys määrittää, mitä ikkunaan sisällytetään.Jos tätä lauseketta käytetään, ORDER BY vaaditaan lukuun ottamatta täysrajoitettuja ikkunoita.huomautuksia
Jos ORDER BY lauseketta tai ikkunakehyslauseketta ei ole,ikkunakehys sisältää kaikki kyseisen osion rivit.
aggregoitujen analyyttisten funktioiden osalta, jos ORDER BY lauseke on olemassa, mutta ikkunan kehyslauseke ei ole, oletuksena käytetään seuraavaa ikkunan kehyslauseketta:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
esimerkiksi seuraavat kyselyt vastaavat:
SELECT book, LAST_VALUE(item) OVER (ORDER BY year)FROM Library
SELECT book, LAST_VALUE(item) OVER ( ORDER BY year RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)FROM Library
säännöt nimetyn ikkunan käyttämisestä ikkunamäärittelyssä
Jos käytät nimettyä ikkunaa ikkunamäärittelyissä, nämä säännöt pätevät:
- nimetyn ikkunan eritelmiä voidaan laajentaa uusilla eritelmillä, jotka määrittelet ikkunan määrittelylausekkeessa.
 - ei voi olla turhia määritelmiä. Jos 
ORDER BYmerkitään nimettyyn ikkunaan ja ikkunan erittelylausekkeeseen virhe. - 
lausejärjestyksellä on väliä.
PARTITION BYon tultava ensin,sittenORDER BYjawindow_frame_clause. Jos lisäät nimetty ikkuna, sen ikkunan TEKNISET käsitellään ensin.--this works:SELECT item, purchases, LAST_VALUE(item) OVER (item_window ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS most_popularFROM ProduceWINDOW item_window AS (ORDER BY purchases)--this does not work:SELECT item, purchases, LAST_VALUE(item) OVER (item_window ORDER BY purchases) AS most_popularFROM ProduceWINDOW item_window AS (ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) - 
nimettyyn ikkunaan ei voi viitata
ORDER BYlausekkeessa, ulommassa kyselyssä tai missään alaryhmässä. 
nimetty ikkuna jaPARTITION BYeivät voi esiintyä yhdessä ikkunan määrittelyssä. Jos tarvitset PARTITION BY, lisää se nimettyyn ikkunaan.
esimerkit ikkunaspesifikaatiota käyttäen
nämä kyselyt määrittelevät osiot analyyttisessä funktiossa:
- laskee välisumman
 - laske kumulatiivinen summa
 - Hanki suosituin kohde kussakin kategoriassa
 - saada viimeinen arvo alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
nämä kyselyt sisältävät nimetyn ikkunan ikkunan määrittelyssä:
- Hanki viimeinen arvo alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
nämä kyselyt määrittelevät, miten rivit on järjestetty osiossa:
- laske välisumma
 - laske kumulatiivinen summa
 - laske liukuva keskiarvo
 - laske kohteiden lukumäärä vaihteluvälissä
 - saa suosituin kohde kussakin luokassa
 - saa viimeinen arvo alueella
 - laske sijoitus
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
määrittelemässä ikkunakehystä lauseke
window_frame_clause: { rows_range } { frame_start | frame_between }rows_range: { ROWS | RANGE }frame_between: { BETWEEN unbounded_preceding AND frame_end_a | BETWEEN numeric_preceding AND frame_end_a | BETWEEN current_row AND frame_end_b | BETWEEN numeric_following AND frame_end_c }frame_start: { unbounded_preceding | numeric_preceding | }frame_end_a: { numeric_preceding | current_row | numeric_following | unbounded_following }frame_end_b: { current_row | numeric_following | unbounded_following }frame_end_c: { numeric_following | unbounded_following }unbounded_preceding: UNBOUNDED PRECEDINGnumeric_preceding: numeric_expression PRECEDINGunbounded_following: UNBOUNDED FOLLOWINGnumeric_following: numeric_expression FOLLOWINGcurrent_row: CURRENT ROW
ikkunan Kehyslause määrittelee nykyisen rivin ympärillä olevan ikkunakehyksen, jonka yli analyyttinen funktio arvioidaan.Vain yhteenlasketut analyyttiset funktiot voivat käyttää ikkunan kehyslauseketta.
- 
rows_range: lauseke, joka määrittelee ikkunakehyksen fyysisellä rowsorilla tai loogisella vaihteluvälillä.-  
ROWS: laskee ikkunakehyksen nykyisen rivin fyysisten kompensaatioiden perusteella. Voit esimerkiksi sisällyttää kaksi riviä ennen ja jälkeen nykyisen rivin. -  
RANGE: laskee ikkunakehyksen nykyisen rivin ympärillä olevan loogisen rivin perusteella, joka perustuu nykyisen rivinORDER BYavainarvoon.Annettu aluearvo lisätään tai vähennetään nykyisen rivin ’ skey-arvoon, jotta voidaan määritellä ikkunan kehyksen alku-tai loppualueen raja. Vaihteluvälipohjaisessa ikkunakehyksessäORDER BYlausekkeessa on oltava täsmälleen yksi ekspressio, ja lausekkeella on oltava anumerinen tyyppi. 
Vihje: Jos haluat käyttää aluetta, jolla on päivämäärä, käytä
ORDER BYkanssaUNIX_DATE()funktio. Jos haluat käyttää aluetta,jossa on aikaleima, käytäUNIX_SECONDS()UNIX_MILLIS()taiUNIX_MICROS()funktiota. -  
 - Määrittele ikkunakehyksen alku siten, että 
unbounded_precedingnumeric_precedingnumeric_following, taicurrent_row.-  
unbounded_preceding: ikkunakehys alkaa osituksen alusta. -  
numeric_precedingtainumeric_following: ikkunakehyksen alku on suhteessa nykyiseen riviin. -  
current_row: ikkunan karmi alkaa nykyiseltä riviltä. 
 -  
 - Määrittele ikkunakehyksen loppu siten, että 
numeric_precedingnumeric_followingcurrent_row, taiunbounded_following.-  
numeric_precedingtainumeric_following: ikkunakehyksen loppu on suhteessa nykyiseen riviin. -  
current_row: Ikkunan karmi päättyy nykyiseen riviin. -  
unbounded_following: ikkunankarmi päättyy partitionin loppuun. 
 -  
 -  
unbounded_preceding: ikkunankarmi alkaa partitionin alusta. -  
numeric_preceding: ikkunakehyksen alku on suhteessa nykyiseen riviin. -  
current_row: ikkunan karmi alkaa nykyiseltä riviltä. 
 frame_between: luo ikkunakehyksen, jossa on ala-ja yläraja.Ensimmäinen raja edustaa alarajaa. Toinen raja edustaa ylärajaa. Vain tiettyjä rajayhdistelmiä voidaan käyttää, kuten edellisessä syntaksissa näkyy.
 frame_start: luo ikkunakehyksen, jossa on alaraja.Ikkunan karmi päättyy nykyiseen riviin.
numeric_expression: lauseke, joka edustaa numeerista tyyppiä.Numeerisen lausekkeen on oltava vakio, ei-negatiivinen kokonaislukuparametri.
toteaa
Jos raja ulottuu osion alun tai lopun ulkopuolelle,ikkunakehys sisältää vain rivejä kyseisen osion sisältä.
ikkunakehyslauseketta ei voi käyttää avigaatio-ja numerofunktioiden kanssa,kuten RANK().
esimerkkejä käyttäen ikkunan kehyslauseketta
nämä kyselyt laskevat arvot ROWS:
- laske kumulatiivinen summa
 - laske liukuva keskiarvo
 - Hanki suosituin kohde kussakin luokassa
 - saada viimeinen arvo alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
nämä kyselyt laskevat arvot RANGE:
- kohteiden lukumäärä alueella
 
nämä kyselyt laskevat arvot osittain tai täysin sitoutumattomalla ikkunalla:
- laskee kokonaissumman
 - laskee kumulatiivisen summan
 - saa kunkin kategorian suosituimman erän
 - lasketaan sijoitus
 
nämä kyselyt laskevat arvot numeerisin rajauksin:
- laske kumulatiivinen summa
 - laskee liukuvan keskiarvon
 - alue
 - Hanki viimeinen arvo alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
nämä kyselyt laskevat arvot nykyisen rivin ollessa rajana:
- laskee kokonaissumman
 - laskee kumulatiivisen summan
 
viitaten nimettyyn ikkunaan
SELECT query_expr, analytic_function_name ( ) OVER over_clauseFROM from_itemWINDOW named_window_expression over_clause: { named_window | ( ) }window_specification: ] ] named_window_expression: named_window AS { named_window | ( ) }
nimetty ikkuna edustaa taulukon riviryhmää, jonka päällä käytetään ananalyyttistä funktiota. Nimetty ikkuna määritelläänWINDOW lausekkeessa, ja siihen viitataan analyyttisen funktion OVER clause.In OVER lauseke, nimetty ikkuna voi näkyä joko itsestään tai upotettuna ikkunan määrittelyyn.
esimerkit
- saavat viimeisen arvon alueella
 - käytä nimettyä ikkunaa ikkunan kehyslausekkeessa
 
Navigointifunktiokäsitteet
Navigointifunktiot laskevat yleensä jonkinvalue_expression ikkunakehyksen eri rivillä kuin nykyinen rivi. OVER lausekkeen syntaksi vaihtelee eri navigointifunktioissa.
OVER lauseke:
-  
PARTITION BY: valinnainen. -  
ORDER BY:- Disallowed for 
PERCENTILE_CONTandPERCENTILE_DISC. - Required for 
FIRST_VALUELAST_VALUENTH_VALUELEADandLAG. 
 - Disallowed for 
 -  
window_frame_clause:- Disallowed for 
PERCENTILE_CONTPERCENTILE_DISCLEADandLAG. - Optional for 
FIRST_VALUELAST_VALUE, andNTH_VALUE. 
 - Disallowed for 
 
kaikkien suunnistustoimintojen tulosdatan tyyppi on sama kuinvalue_expression.
Numerointifunktioiden käsitteet
Numerointifunktiot antavat kullekin riville kokonaislukuarvot sen mukaan, missä ne sijaitsevat määritellyssä ikkunassa.
Example of RANK()DENSE_RANK(), ja ROW_NUMBER():
WITH Numbers AS (SELECT 1 as x UNION ALL SELECT 2 UNION ALL SELECT 2 UNION ALL SELECT 5 UNION ALL SELECT 8 UNION ALL SELECT 10 UNION ALL SELECT 10)SELECT x, RANK() OVER (ORDER BY x ASC) AS rank, DENSE_RANK() OVER (ORDER BY x ASC) AS dense_rank, ROW_NUMBER() OVER (ORDER BY x) AS row_numFROM Numbers+---------------------------------------------------+| x | rank | dense_rank | row_num |+---------------------------------------------------+| 1 | 1 | 1 | 1 || 2 | 2 | 2 | 2 || 2 | 2 | 2 | 3 || 5 | 4 | 3 | 4 || 8 | 5 | 4 | 5 || 10 | 6 | 5 | 6 || 10 | 6 | 5 | 7 |+---------------------------------------------------+
-  
RANK(): X=5: n kohdallarankon 4, silläRANK()korotus edellisen ikkunan tilausryhmän vertaisten lukumäärän mukaan. -  
DENSE_RANK(): For x=5,dense_rankon 3, koskaDENSE_RANK()always increased by 1, koskaan ohita arvoa. -  
ROW_NUMBER(): For x=5,row_numon 4. 
Aggregaattifunktion käsitteet
aggregaattifunktio on funktio, joka suorittaa laskutoimituksen arvojen joukolla. Useimpia aggregaattifunktioita voidaan käyttää ananalyyttisessä funktiossa. Näitä yhteenlaskettuja funktioita kutsutaan analyyttisiksi funktioiksi.
aggregaattifunktioilla OVER lauseke liitetään aggregaattifunktiokutsuun; funktiokutsun syntaksi pysyy muutoin muuttumattomana.Kuten niiden yhteenlasketun funktion kollegansa, nämä analyyttiset funktiot suorittavat erotuksia, mutta erityisesti kunkin rivin asiaankuuluvan ikkunan kehyksen yli.Näiden analyyttisten funktioiden tulosinformaatiotyypit ovat samat kuin theiraggregate-funktioiden vastineet.
analyyttiset funktioesimerkit
näissä esimerkeissä korostettu kohde on nykyinen rivi. Boldeditemit ovat rivejä, jotka sisältyvät analyysiin.
esimerkeissä käytetyt yleiset taulukot
seuraavissa aggregaattiesimerkeissä käytetään seuraavia taulukoita: ProduceEmployeesja Farm.
Produce table
Some examples reference a table called Produce:
WITH Produce AS (SELECT 'kale' as item, 23 as purchases, 'vegetable' as category UNION ALL SELECT 'orange', 2, 'fruit' UNION ALL SELECT 'cabbage', 9, 'vegetable' UNION ALL SELECT 'apple', 8, 'fruit' UNION ALL SELECT 'leek', 2, 'vegetable' UNION ALL SELECT 'lettuce', 10, 'vegetable')SELECT * FROM Produce+-------------------------------------+| item | category | purchases |+-------------------------------------+| kale | vegetable | 23 || orange | fruit | 2 || cabbage | vegetable | 9 || apple | fruit | 8 || leek | vegetable | 2 || lettuce | vegetable | 10 |+-------------------------------------+
työntekijöiden taulukko
Some examples reference a table called Employees:
WITH Employees AS (SELECT 'Isabella' as name, 2 as department, DATE(1997, 09, 28) as start_date UNION ALL SELECT 'Anthony', 1, DATE(1995, 11, 29) UNION ALL SELECT 'Daniel', 2, DATE(2004, 06, 24) UNION ALL SELECT 'Andrew', 1, DATE(1999, 01, 23) UNION ALL SELECT 'Jacob', 1, DATE(1990, 07, 11) UNION ALL SELECT 'Jose', 2, DATE(2013, 03, 17))SELECT * FROM Employees+-------------------------------------+| name | department | start_date |+-------------------------------------+| Isabella | 2 | 1997-09-28 || Anthony | 1 | 1995-11-29 || Daniel | 2 | 2004-06-24 || Andrew | 1 | 1999-01-23 || Jacob | 1 | 1990-07-11 || Jose | 2 | 2013-03-17 |+-------------------------------------+
Farm table
Some examples reference a table called Farm:
WITH Farm AS (SELECT 'cat' as animal, 23 as population, 'mammal' as category UNION ALL SELECT 'duck', 3, 'bird' UNION ALL SELECT 'dog', 2, 'mammal' UNION ALL SELECT 'goose', 1, 'bird' UNION ALL SELECT 'ox', 2, 'mammal' UNION ALL SELECT 'goat', 2, 'mammal')SELECT * FROM Farm+-------------------------------------+| animal | category | population |+-------------------------------------+| cat | mammal | 23 || duck | bird | 3 || dog | mammal | 2 || goose | bird | 1 || ox | mammal | 2 || goat | mammal | 2 |+-------------------------------------+
lasketaan kokonaissumma
Tämä laskee kokonaissumman kaikilleProduce taulukon erille.
- (appelsiini, omena, purjo, kaali, lehtisalaatti, lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtikaali) lehtikaali) = 54 ostot yhteensä
 - (appelsiini, omena, purjo, kaali, lehtisalaatti, lehtikaali)=54 ostot yhteensä
 
SELECT item, purchases, category, SUM(purchases) OVER () AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 54 || leek | 2 | vegetable | 54 || apple | 8 | fruit | 54 || cabbage | 9 | vegetable | 54 || lettuce | 10 | vegetable | 54 || kale | 23 | vegetable | 54 |+-------------------------------------------------------+
laskee välisumman
 tämä laskee välisumman kullekin luokalle Produce taulukko.
- hedelmä
- (appelsiini, omena) = 10 kokonaisostosta
 - (appelsiini, omena) = 10 kokonaisostosta
 
 - vihannes
- (purjo, kaali, lehtikaali) = 44 kokonaisostosta
 - (purjo, kaali, lehtikaali) = 44 kokonaisostosta
 - (purjo, kaali, lehtikaali) = 44 kokonaisostosta
 - (purjo, kaali, lehtikaali) = 44 kokonaisostosta
 - (purjo, kaali, lehtikaali)=44 kokonaisostosta
 - (purjo, kaali, lehtisalaatti, lehtikaali)=44 kokonaisostosta
 
/li>
 
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 10 || apple | 8 | fruit | 10 || leek | 2 | vegetable | 44 || cabbage | 9 | vegetable | 44 || lettuce | 10 | vegetable | 44 || kale | 23 | vegetable | 44 |+-------------------------------------------------------+
lasketaan kumulatiivinen summa
 tämä laskee kumulatiivisen summan kullekin luokalle Produce taulukossa. Summa lasketaan suhteessa theorder määriteltyyn ORDER BY lauseketta käyttäen.
- hedelmä
- (appelsiini, omena) = 2 kokonaisostosta
 - (appelsiini, omena) = 10 kokonaisostosta
 
 - vihannes
- (purjo, kaali, lehtikaali) = 2 kokonaisostosta
 - (purjo, kaali, lehtikaali) = 11 kokonaisostosta
 - (purjo, kaali, lehtikaali) = 21 kokonaisostosta
 - (purjo, kaali, lehtisalaatti, lehtikaali) = 44 kokonaisostosta
 
 
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 2 || apple | 8 | fruit | 10 || leek | 2 | vegetable | 2 || cabbage | 9 | vegetable | 11 || lettuce | 10 | vegetable | 21 || kale | 23 | vegetable | 44 |+-------------------------------------------------------+
 tämä tekee saman kuin edellinen esimerkki. CURRENT ROW rajaksi ei tarvitse lisätä CURRENT ROW
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS UNBOUNDED PRECEDING ) AS total_purchasesFROM Produce
tässä esimerkissä kaikki Produce – taulukon erät sisältyvät osioon. Vain edeltävät rivit analysoidaan. Analyysi alkaa kaksiosaisena ennen osion nykyistä riviä.
- (appelsiini, purjo, omena, kaali, lehtisalaatti, lehtikaali) = NULL
 - (appelsiini, purjo, omena, kaali, lehtikaali) = NULL
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 2
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 4
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 12
 - (appelsiini, purjo, omena, kaali, lehtisalaatti, lehtikaali) = 21
 
SELECT item, purchases, category, SUM(purchases) OVER ( ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING ) AS total_purchasesFROM Produce;+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | NULL || leek | 2 | vegetable | NULL || apple | 8 | fruit | 2 || cabbage | 9 | vegetable | 4 || lettuce | 10 | vegetable | 12 || kale | 23 | vegetable | 21 |+-------------------------------------------------------+
lasketaan liukuva keskiarvo
tämä laskee liukuvan keskiarvon Produce taulukossa.Alaraja on 1 rivi ennen nykyistä riviä. Yläraja on 1 rivi nykyisen rivin jälkeen.
- (appelsiini, purjo, omena, kaali, lehtisalaatti, lehtikaali) = 2 keskiostosta
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 4 keskiostosta
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 6.3333 keskiostosta
 - (appelsiini, purjo, omena, kaali, lehtikaali) = 9 keskiostosta
 - (appelsiini, purjo, omena, kaali, lehtikaali), lehtikaali) = 14 keskiostosta
 - (appelsiini, purjo, omena, kaali, salaatti, lehtikaali) = 16.5 keskimääräiset ostot
 
SELECT item, purchases, category, AVG(purchases) OVER ( ORDER BY purchases ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS avg_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | avg_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 2 || leek | 2 | vegetable | 4 || apple | 8 | fruit | 6.33333 || cabbage | 9 | vegetable | 9 || lettuce | 10 | vegetable | 14 || kale | 23 | vegetable | 16.5 |+-------------------------------------------------------+
lasketaan erien lukumäärä alueella
tällä esimerkillä saadaan Farm taulukko.
- (hanhi, koira, härkä, vuohi, ankka, Kissa) = 4 eläintä populaatioiden välillä 0-2.
 - (hanhi, koira, härkä, vuohi, ankka, Kissa) = 5 eläintä populaatioiden välillä 1-3.
 - (hanhi, koira, härkä, vuohi, ankka, Kissa) = 5 eläintä populaatioiden välillä 1-3.
 - (hanhi, koira, härkä, vuohi, ankka, Kissa) = 5 eläintä populaatioiden välillä 1-3.
 - (hanhi, koira, härkä, vuohi, ankka, Kissa) = 4 eläintä populaatioiden välillä 2-4.
 - (hanhi, koira, härkä, vuohi, ankka, Kissa) = 1 eläin populaatioiden välillä 22-24.
 
SELECT animal, population, category, COUNT(*) OVER ( ORDER BY population RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS similar_populationFROM Farm;+----------------------------------------------------------+| animal | population | category | similar_population |+----------------------------------------------------------+| goose | 1 | bird | 4 || dog | 2 | mammal | 5 || ox | 2 | mammal | 5 || goat | 2 | mammal | 5 || duck | 3 | bird | 4 || cat | 23 | mammal | 1 |+----------------------------------------------------------+
Get the most popular item in each category
This example gets the most popular item in each category. Se määrittelee, miten ikkunan rivit on jaettu ja järjestetty kussakin osiossa. Produce taulukkoon viitataan.
- hedelmä
- (appelsiini, omena) = omena on suosituin
 - (appelsiini, omena) = omena on suosituin
 
 - vihannes
- (purjo, kaali, salaatti, lehtikaali) = lehtikaali on suosituin
 - (purjo, kaali, salaatti, lehtikaali) = lehtikaali on suosituin
 - (purjo, kaali, salaatti, lehtikaali) = lehtikaali on suosituin
 - (purjo, kaali, salaatti, lehtikaali) = lehtikaali on suosituin
 - (purjo, kaali, lehtikaali)=lehtikaali on suosituin
 - (purjo, kaali, lehtisalaatti, lehtikaali)=lehtikaali on suosituinta
 
 
SELECT item, purchases, category, LAST_VALUE(item) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS most_popularFROM Produce+----------------------------------------------------+| item | purchases | category | most_popular |+----------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | kale || cabbage | 9 | vegetable | kale || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+----------------------------------------------------+
saa viimeisen arvon alueella
 Tämä esimerkki saa suosituimman kohteen tietyssä ikkunankarmissa, käyttäen Produce  Taulukko. Ikkunankarmissa analysoidaan jopa kolme palstaa kerrallaan. Katso tarkemminmost_popular sarake vihanneksille.Sen sijaan saada suosituin kohde tietyn luokan, se saa themost suosittu kohde tietyn alueen kyseisessä luokassa.
- hedelmä
- (appelsiini, omena) = omena on suosituin
 - (appelsiini, omena) = omena on suosituin
 
 - vihannes
- (purjo, kaali, lehtisalaatti, lehtikaali) = kaali on suosituin
 - (purjo, kaali, lehtikaali) = lehtisalaatti on suosituin
 - (purjo, kaali, lehtikaali) = lehtisalaatti on suosituin
 - (purjo, kaali, lehtikaali) = lehtikaali on suosituin
 - (purjo, kaali, lehtikaali)=lehtikaali on suosituin
 - (purjo, kaali, lehtisalaatti, lehtikaali)=lehtikaali on suosituin
 
 
SELECT item, purchases, category, LAST_VALUE(item) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM Produce+----------------------------------------------------+| item | purchases | category | most_popular |+----------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | cabbage || cabbage | 9 | vegetable | lettuce || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+----------------------------------------------------+
 Tämä esimerkki palauttaa samat tulokset kuin edellinen esimerkki, mutta se sisältää nimetyn ikkunan nimeltä item_window. Osa ikkunan spesifikaatioista on määritelty suoraan OVER – lausekkeessa ja osa on määritelty nimetyssä ikkunassa.
SELECT item, purchases, category, LAST_VALUE(item) OVER ( item_window ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM ProduceWINDOW item_window AS ( PARTITION BY category ORDER BY purchases)
lasketaan sijoitus
tässä esimerkissä lasketaan kunkin työntekijän sijoitus osastollaan heidän aloituspäivänsä perusteella. Ikkunaspesifikaatio on määritelty suoraan OVER lausekkeessa. Employees taulukkoon viitataan.
- department 1
 - (Jacob, Anthony, Andrew) = Assigny rank 1 Jacobille
 - (Jacob, Anthony, Andrew) = Assigny rank 2 Anthonylle
 -  department 2
- (Isabella, Daniel, Jose) = Assigny rank 1 Isabellalle
 
 - (Isabella, Daniel, Jose) = Assigny rank 2: lle Daniel
 - (Isabella, Daniel, Jose) = anna sija 3 Joselle
 
SELECT name, department, start_date, RANK() OVER (PARTITION BY department ORDER BY start_date) AS rankFROM Employees;+--------------------------------------------+| name | department | start_date | rank |+--------------------------------------------+| Jacob | 1 | 1990-07-11 | 1 || Anthony | 1 | 1995-11-29 | 2 || Andrew | 1 | 1999-01-23 | 3 || Isabella | 2 | 1997-09-28 | 1 || Daniel | 2 | 2004-06-24 | 2 || Jose | 2 | 2013-03-17 | 3 |+--------------------------------------------+
käytä nimettyä ikkunaa ikkunan kehyslauseessa
 voit määritellä osan logiikastasi nimettyyn ikkunaan ja osan siitä herätyksen kehyslauseke. Tämä logiikka on yhdistetty. Tässä on esimerkki, käyttäenProduce – taulukkoa.
SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window) AS most_popularFROM ProduceWINDOW item_window AS ( PARTITION BY category ORDER BY purchases ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)+-------------------------------------------------------+| item | purchases | category | most_popular |+-------------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | lettuce || cabbage | 9 | vegetable | kale || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+-------------------------------------------------------+
voit saada aikaisemmat tulokset myös näillä esimerkeillä:
SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window) AS most_popularFROM ProduceWINDOW a AS (PARTITION BY category), b AS (a ORDER BY purchases), c AS (b ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING), item_window AS (c)
SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS most_popularFROM ProduceWINDOW a AS (PARTITION BY category), b AS (a ORDER BY purchases), item_window AS (b)
seuraava esimerkki tuottaa virheen, koska ikkunan kehyslauseke on määritelty kahdesti:
SELECT item, purchases, category, LAST_VALUE(item) OVER ( item_window ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM ProduceWINDOW item_window AS ( ORDER BY purchases ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
            
Leave a Reply