Jokainen yleinen SQL-ikkunafunktio ja niitä ohjaavat lauseet, ryhmiteltyinä tehtävän mukaan: rivien sijoittelu, naapurien tarkastelu, juoksevat kokonaisluvut kehyksen yli sekä ensimmäisen tai viimeisen arvon poiminta. Jokainen rivi yhdistää funktion yksiriviseen esimerkkiin.
Ikkunafunktio laskee tuloksen nykyiseen riviin liittyvien rivien yli ryhmittämättä niitä kuten GROUP BY tekee. Jokainen ikkunafunktio päättyy OVER-lauseeseen, joka määrittää ikkunan: PARTITION BY ryhmittelee rivit, ORDER BY järjestää ne, ja valinnainen kehys rajaa liukuvan joukon. Hallitset OVERin, loput on sanastoa.
Viitetaulukko · 27 merkintää
SQL-ikkunafunktiotExplained
27 of 27 rows
Sijoittelu
Yksilöllinen järjestysnumero jokaiselle riville ikkunan sisällä.
ROW_NUMBER() OVER (ORDER BY total DESC)
Sijoitus väleillä; tasatulokset jakavat sijoituksen ja ohittavat seuraavat numerot.
RANK() OVER (ORDER BY total DESC)
Sijoitus ilman välejä; tasatulokset jakavat sijoituksen eikä mitään ohiteta.
DENSE_RANK() OVER (ORDER BY total DESC)
Jaa järjestetty ikkuna n suunnilleen yhtä suureen osaan.
NTILE(4) OVER (ORDER BY total DESC)
Vilkaisu naapureihin
Arvo n riviä taaksepäin; oletus korvaa sen, kun tällaista riviä ei ole.
LAG(total, 1, 0) OVER (ORDER BY created_at)
Arvo n riviä eteenpäin; oletus korvaa sen, kun tällaista riviä ei ole.
LEAD(total, 1, 0) OVER (ORDER BY created_at)
Aggregointi ikkunan yli
Juokseva tai osiokohtainen kokonaisluku ryhmittämättä rivejä.
SUM(total) OVER (ORDER BY created_at)
Juokseva tai osiokohtainen keskiarvo.
AVG(total) OVER (PARTITION BY user_id)
Juokseva tai osiokohtainen rivimäärä.
COUNT(*) OVER (PARTITION BY user_id)
Pienin arvo ikkunan tai osion yli.
MIN(total) OVER (PARTITION BY user_id)
Suurin arvo ikkunan tai osion yli.
MAX(total) OVER (PARTITION BY user_id)
SUM ja ORDER BY sekä alusta asti auki oleva kehys; jokainen rivi summaa kaiken itseensä asti.
SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
AVG kehyksellä, joka kattaa n riviä ennen ja jälkeen nykyisen rivin.
AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
Ensimmäinen, viimeinen ja prosentit
Ikkunan järjestyksen ensimmäinen arvo.
FIRST_VALUE(total) OVER (ORDER BY total DESC)
Kehyksen viimeinen arvo; ilman UNBOUNDED FOLLOWING -määritystä kehys päättyy nykyiseen riviin.
LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
Ikkunan järjestyksen n:nennen rivin arvo.
NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
Rivin suhteellinen sijoitus välillä 0–1.
PERCENT_RANK() OVER (ORDER BY total)
Osa riveistä nykyisellä rivillä tai ennen sitä, arvosta 1/n arvoon 1.
CUME_DIST() OVER (ORDER BY total)
OVER-lause
Määrittää ikkunan, jonka jokainen funktio lukee.
<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
Käynnistää ikkunan uudelleen kullekin riviryhmälle.
PARTITION BY user_id
Järjestää rivit kunkin osion sisällä.
ORDER BY created_at
Rajaa liukuvaa kehystä, esim. edeltävistä seuraaviin riveihin.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Rajaa kehystä arvojen eikä rivikohtien mukaan; CURRENT ROW sisältää tasatulokset, ja tämä on oletuskehys ORDER BY:n alaisena.
RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
Rajaa kehystä ORDER BY:n tasatulosten riviryhmillä.
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
Poistaa nykyisen rivin kehyksestä; EXCLUDE TIES poistaa sen sijaan sen tasatulokset.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
Nimeää ikkunan kerran per kysely, jotta useat OVER-lauseet voivat käyttää sitä uudelleen.
WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
Rajaa rivit, jotka ikkuna-aggregaatti lukee, ennen ikkunan soveltamista.
SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)