Articles

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 numerointifunktiota RANK() voidaan käyttää tässä.
  • argument_list: analyyttiselle funktiolle ominaisia argumentteja.Joissakin toiminnoissa niitä on, joissakin ei.
  • OVER: analyyttisen funktion syntaksin vaatima Avainsana OVER lauseke.
  • 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ä:

  • SELECT lista. Jos analyyttinen funktio esiintyy SELECT – luettelossa, sen argumenttiluettelo ja OVER – lauseke eivät voi viitata samassa luettelossa esitettyihin peitenimiin.
  • ORDER BY lauseke. Jos analyyttinen funktio esiintyy kyselyn ORDER BY lausekkeessa, sen argumenttiluettelo voi viitata SELECT list-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ääritelty WINDOW lausekkeella.
  • PARTITION BY: hajottaa tulorivit erillisiksi osioiksi, joiden yli analyyttinen funktio arvioidaan itsenäisesti.
    • Moniosoituslausekkeet sallitaan PARTITION BY lausekkeessa.
    • 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 BY merkitään nimettyyn ikkunaan ja ikkunan erittelylausekkeeseen virhe.
    • lausejärjestyksellä on väliä. PARTITION BY on tultava ensin,sitten ORDER BY ja window_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)
    • nimetty ikkuna jaPARTITION BYeivät voi esiintyä yhdessä ikkunan määrittelyssä. Jos tarvitset PARTITION BY, lisää se nimettyyn ikkunaan.

    • nimettyyn ikkunaan ei voi viitata ORDER BY lausekkeessa, ulommassa kyselyssä tai missään alaryhmässä.

    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 rivin ORDER BY avainarvoon.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 BY lausekkeessa 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 BY kanssaUNIX_DATE() funktio. Jos haluat käyttää aluetta,jossa on aikaleima, käytä UNIX_SECONDS()UNIX_MILLIS() tai UNIX_MICROS() funktiota.

    • 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.

      • Määrittele ikkunakehyksen alku siten, että unbounded_precedingnumeric_precedingnumeric_following, tai current_row.
        • unbounded_preceding: ikkunakehys alkaa osituksen alusta.
        • numeric_preceding tai numeric_following: ikkunakehyksen alku on suhteessa nykyiseen riviin.
        • current_row: ikkunan karmi alkaa nykyiseltä riviltä.
      • Määrittele ikkunakehyksen loppu siten, että numeric_precedingnumeric_followingcurrent_row, tai unbounded_following.
        • numeric_preceding tai numeric_following: ikkunakehyksen loppu on suhteessa nykyiseen riviin.
        • current_row: Ikkunan karmi päättyy nykyiseen riviin.
        • unbounded_following: ikkunankarmi päättyy partitionin loppuun.

      frame_start: luo ikkunakehyksen, jossa on alaraja.Ikkunan karmi päättyy nykyiseen riviin.

      • unbounded_preceding: ikkunankarmi alkaa partitionin alusta.
      • numeric_preceding: ikkunakehyksen alku on suhteessa nykyiseen riviin.
      • current_row: ikkunan karmi alkaa nykyiseltä riviltä.

      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:
      1. Disallowed for PERCENTILE_CONT and PERCENTILE_DISC.
      2. Required for FIRST_VALUELAST_VALUENTH_VALUELEADand LAG.
    • window_frame_clause:
      1. Disallowed for PERCENTILE_CONTPERCENTILE_DISCLEAD and LAG.
      2. Optional for FIRST_VALUELAST_VALUE, and NTH_VALUE.

    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 kohdalla rank on 4, sillä RANK() korotus edellisen ikkunan tilausryhmän vertaisten lukumäärän mukaan.
    • DENSE_RANK(): For x=5, dense_rank on 3, koska DENSE_RANK() always increased by 1, koskaan ohita arvoa.
    • ROW_NUMBER(): For x=5, row_num on 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
      • /li>

      • (purjo, kaali, lehtisalaatti, lehtikaali)=44 kokonaisostosta
    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)