Articles

analitikus függvénykoncepciók Standard SQL

egy analitikus függvény kiszámítja az értékeket egy sorcsoporton keresztül, és minden sorhoz egy-egy eredményként tér vissza. Ez különbözik az aggregált függvénytől, amely egyetlen eredményt ad a sorok csoportjához.

egy analitikus függvény tartalmaz egyOVER záradékot, amely meghatározza a sorok ablakátaz értékelendő sor körül. Minden sor esetében az analitikus függvény eredményea sorok kiválasztott ablakának bemenetként történő kiszámításával lehetséges az aggregáció csökkentése.

analitikus függvények segítségével kiszámíthatja a mozgóátlagokat, a rangsorolt tételeket, a kalkulált összegeket, és más elemzéseket is elvégezhet.

analitikus függvényként a következő függvényeket lehet használni:navigációs funkciók,számozási függvények és analitikus függvények

analitikus függvény szintaxis

analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }window_specification: ] ] window_frame_clause: { rows_range } { frame_start | frame_between }rows_range: { ROWS | RANGE }

jelölési szabályok

  • szögletes zárójelek ” jelölik az opcionális záradékokat.
  • zárójelek “() ” szó szerinti zárójeleket jelölnek.
  • a ” / ” függőleges sáv logikai vagy.
  • a “{} ” göndör zárójelek egy sor opciót tartalmaznak.
  • egy vessző, amelyet egy ellipszis követ szögletes zárójelben “” jelzi, hogy az előző elem vesszővel elválasztott listában megismételhető.

leírás

egy analitikus függvény kiszámítja az eredményeket egy sorcsoporton keresztül. Használhatja thefollowing szintaxis építeni egy analitikus függvény:

  • analytic_function_name: a függvény, amely elvégzi az analitikus művelet.Itt például a RANK() számozási függvény használható.
  • argument_list: az analitikus függvényre jellemző érvek.Egyes funkciók vannak, egyesek nem.
  • OVER: A OVER pontban megadott analitikus függvény szintaxisában szükséges kulcsszó.
  • over_clause: hivatkozás egy ablakra, amely meghatározza a táblázat sorainak egy csoportját, amelyre analitikus függvényt kell használni.
  • window_specification: az ablak specifikációit határozza meg.
  • window_frame_clause: meghatározza az ablak keretétaz ablakhoz.
  • rows_range: meghatározza az ablakkeret fizikai sorait vagy alogikus tartományát.

Megjegyzések

egy analitikus függvény skaláris kifejezésként jelenhet meg operand két helyen a lekérdezésben:

  • a SELECT lista. Ha az analitikus függvény a SELECT listában jelenik meg, annak argumentumlistája és OVER záradék nem hivatkozhat az ugyanabban a SELECT listában bevezetett álnevekre.
  • a ORDER BY záradék. Ha az analitikus függvény a lekérdezés ORDER BY záradékában jelenik meg, annak argumentumlistája a SELECT listaaliasokra hivatkozhat.

egy analitikus függvény nem hivatkozhat egy másik analitikus függvényre az argument listájában, vagy annak OVER záradékára, akár közvetve álnéven keresztül.

egy analitikus függvény kiértékelése az aggregáció után történik. Először például aGROUP BY záradékot és a nem analitikus aggregált függvényeket értékeljük.Mivel az aggregált függvényeket az analitikus függvények előtt értékelik, az aggregált függvényeket input operandusként lehet használni az analitikus függvényekhez.

visszaadja

egyetlen eredmény minden sorban a bemenet.

A

analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }

leírás

a OVER záradék olyan ablakra utal, amely meghatározza a tableupon sorainak egy csoportját, amely analitikus függvényt használ. Megadhat egynamed_window – t, amelyet a lekérdezés határoz meg, vagy lehetmeghatározza az új ablak specifikációit.

Megjegyzések

Ha sem egy megnevezett ablak, sem ablak specifikáció nincs megadva, az allinput sorok minden sor ablakában szerepelnek.

Példák segítségével, hogy a OVER záradék

Ezek a lekérdezések használata ablak műszaki adatok:

  • Számítás összesen
  • Számítási egy részösszeg
  • Számítási halmozott összeg
  • Számítási egy mozgó átlag
  • Kiszámolja a tételek száma tartományon belül
  • a legnépszerűbb elem az egyes kategóriákban
  • az utolsó érték a tartomány
  • Számítási rangot

Ezek a lekérdezések használata nevű ablak:

  • Szerezd meg az utolsó értéket egy
  • tartományba használjon megnevezett ablakot egy ablakkeret záradékban

az ablak specifikációjának meghatározása

window_specification: ] ] 

leírás

meghatározza az ablak specifikációit.

  • named_window: a WINDOW záradékkal definiált meglévő ablak neve.
  • PARTITION BY: A bemeneti sorokat külön partíciókra bontja, amely felett az analitikus függvényt függetlenül értékelik.
    • több partíciós kifejezés megengedett a PARTITION BY záradékban.
    • egy kifejezés nem tartalmazhat lebegőpontos típusokat,nem csoportosítható típusokat, állandókat vagy analitikus funkciókat.
    • ha ezt az opcionális záradékot nem használja, akkor a beviteli táblázatban lévő összes soregy partíciót kell létrehoznia.
  • ORDER BY: meghatározza, hogy a sorok hogyan rendeződnek egy partíción belül.Ez a záradék a legtöbb esetben opcionális, de néhány esetben szükségesesesetekben a navigációs funkciókhoz.
  • window_frame_clause : Aggregált analitikusfunkciók esetén meghatározza az ablakkeretet az aktuális partíción belül.Az ablakkeret határozza meg, hogy mit kell tartalmaznia az ablakban.Ha ezt a záradékot használjuk, akkor aORDER BY szükséges, kivéve a teljes ablakokat.

Megjegyzések

Ha sem a ORDER BY záradék,sem az ablakkeret záradék nincs jelen, az ablakkeret tartalmazza a partíció összes sorát.

aggregált analitikus függvények esetén, ha a ORDER BY záradék jelen van, deaz ablakkeret záradék nem, az alábbi ablakkeret záradék alapértelmezés szerint használatban van:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

például a következő lekérdezések egyenértékűek:

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

Az ablak specifikációjában egy megnevezett ablak használatára vonatkozó szabályok

  • a megnevezett ablakban lévő SPECIFIKÁCIÓK bővíthetőekaz ablak specifikációs záradékában megadott Új specifikációkkal.
  • nem lehet redundáns definíciók. Ha van ORDER BY Claus a megnevezett ablakban és az ablak specifikációs záradékában, az anerror eldobásra kerül.
  • a záradékok sorrendje számít. PARTITION BYelőször jönnie kell,majd ORDER BYés window_frame_clause. Ha hozzáad egy megnevezett ablakot, először az ablak specifikációit dolgozza fel.

    --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)
  • egy megnevezett ablak és PARTITION BY nem jelenhet meg együtt a window specifikációban. Ha PARTITION BY – ra van szüksége, adja hozzá a megnevezett ablakhoz.

  • nem hivatkozhat egy megnevezett ablakra egy ORDER BY záradékban, egy külső lekérdezésben vagy bármely alkeretben.

Példák segítségével az ablak specifikáció

Ezek a lekérdezések define partíciók egy analitikus függvény:

  • Számítási egy részösszeg
  • Számítási halmozott összeg
  • a legnépszerűbb elem az egyes kategóriákban
  • az utolsó érték a tartomány
  • Számítási rangot
  • egy nevű ablak, ablak keret záradék

Ezek a lekérdezések tartalmazza nevű ablak, ablak specifikáció:

  • Szerezd meg az utolsó értéket egy
  • tartományba használjon megnevezett ablakot egy ablakkeret záradékban

ezek a lekérdezések határozzák meg, hogy a sorok hogyan rendeződnek egy partícióban:

  • Számítási egy részösszeg
  • Számítási halmozott összeg
  • Számítási egy mozgó átlag
  • Kiszámolja a tételek száma tartományon belül
  • a legnépszerűbb elem az egyes kategóriákban
  • az utolsó érték a tartomány
  • Számítási rangot
  • Használjon nevű ablak, ablak keret záradék

Meghatározó az ablakkeret záradék

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

Az ablakkeret záradék meghatározza az ablak keret körül az aktuális sor withina partíció, amely felett az analitikus függvény értékelt.Csak az aggregált analitikus funkciók használhatják az ablakkeret záradékot.

  • rows_range: olyan záradék, amely fizikai sorokkal rendelkező ablakkeretet határoz megvagy logikai tartomány.

    • ROWS: kiszámítja az ablakkeretet az aktuális sor fizikai eltolásai alapján. Például két sort is tartalmazhat előtt és utánaaz aktuális sor.
    • RANGE: kiszámítja az ablakkeretet az aktuális sor logikai tartománya alapján, az aktuális sor ORDER BY kulcsérték alapján.A megadott tartomány érték hozzáadódik vagy levonásra kerül az aktuális sor ‘ skey értékéhez, hogy meghatározza a kezdő vagy végződő tartományhatárt a window kerethez. Egy tartományalapú ablakkeretben pontosan egynek kell lennieexpresszió a ORDER BY záradékban, a kifejezésnek anumer típusúnak kell lennie.

    Tipp: Ha dátumtartományt szeretne használni, használja a ORDER BYUNIX_DATE() függvényt. Ha időbélyeggel rendelkező tartományt szeretne használni, használja a UNIX_SECONDS()UNIX_MILLIS(), vagy UNIX_MICROS() funkciót.

  • frame_between: alsó és felső határral rendelkező ablakkeretet hoz létre.Az első határ az alsó határ. A második határjelzi a felső határt. Csak bizonyos határkombinációk lehetnekhasznált, amint azt az előző szintaxis mutatja.

    • határozza meg az ablakkeret elejét unbounded_precedingnumeric_precedingnumeric_following vagy current_row.
      • unbounded_preceding: az ablakkeret a partíció elején kezdődik.
      • numeric_precedingvagy numeric_following: az ablakkeret kezdete a jelenlegi sorhoz viszonyítva van.
      • current_row: az ablakkeret az aktuális sorban kezdődik.
    • határozza meg az ablakkeret végét numeric_precedingnumeric_followingcurrent_rowvagy unbounded_following.
      • numeric_precedingvagy numeric_following: az ablakkeret vége az aktuális sorhoz viszonyítva van.
      • current_row : Az ablakkeret az aktuális sorban végződik.
      • unbounded_following: az ablakkeret a partíció végén ér véget.
  • frame_start: alsó határral rendelkező ablakkeretet hoz létre.Az ablakkeret az aktuális sorban végződik.

    • unbounded_preceding: az ablakkeret a partíció elején kezdődik.
    • numeric_preceding: az ablakkeret kezdete a jelenlegi sorhoz viszonyítva van.
    • current_row: az ablakkeret az aktuális sorban kezdődik.
  • numeric_expression: egy numerikus típust ábrázoló kifejezés.A numerikus kifejezésnek állandó, nem negatív integeror paraméternek kell lennie.

Megjegyzések

Ha egy határ túlnyúlik a partíció elején vagy végén,az ablakkeret csak sorokat tartalmaz a partíción belül.

nem használhat ablakkeret záradékot anavigációs funkciókkal ésnumbering funkciókkal, mint például a RANK().

példák az ablakkeret záradékával

Ezek a lekérdezések ROWS:

  • Számítási halmozott összeg
  • Számítási egy mozgó átlag
  • a legnépszerűbb elem az egyes kategóriákban
  • az utolsó érték a tartomány
  • egy nevű ablak, ablak keret záradék

Ezek a lekérdezések számítási értékek RANGE:

  • Kiszámolja a tételek száma tartományon belül

Ezek a lekérdezések számítási értékek a részben vagy teljesen kötetlen ablak:

  • Számítás összesen
  • Számítási egy részösszeg
  • Számítási halmozott összeg
  • a legnépszerűbb elem az egyes kategóriákban
  • Számítási rangot

Ezek a lekérdezések számítási értékeket a numerikus határok:

  • Számítási halmozott összeg
  • Számítási egy mozgó átlag
  • Kiszámolja a tételek száma tartományon belül
  • az utolsó érték a tartomány
  • egy nevű ablak, ablak keret záradék

Ezek a lekérdezések számítási értékek az aktuális sor, mint a határ:

  • Számítás összesen
  • Számítási egy részösszeg
  • Számítási halmozott összeg

Hivatkozás nevű ablak

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 | ( ) }

A nevű ablak, egy csoportot képvisel a sorok egy táblázat, ami alapján használja ananalytic funkció. A megnevezett ablak aWINDOW pontban van definiálva, és az Inan analitikus függvény OVER clause.In egy OVER záradék, egy megnevezett ablak megjelenhet önmagában vagy beágyazvaablakspecifikációban.

példák

  • Szerezd meg az utolsó értéket egy
  • tartományba használjon megnevezett ablakot egy ablakkeret záradékban

navigációs funkció fogalmak

navigációs funkciók általában kiszámítanak néhányvalue_expression az ablakkeret egy másik sorában a jelenlegi sorból. AOVER záradék szintaxisa a navigációs funkciók között változik.

követelmények aOVER záradék:

  • PARTITION BY: opcionális.
  • 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.

minden navigációs funkció esetében az eredmény adattípusa megegyezik avalue_expressiontípusával.

számozási funkciókoncepciók

számozási függvények egész értékeket rendelnek minden sorhoz a megadott ablakban lévő pozíciójuk alapján.

példa RANK()DENSE_RANK() és 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 esetén a rank 4, mivel RANK() az előző ablakrendelési csoportban lévő társak számának növekedése.
  • DENSE_RANK(): x=5, dense_rank3, mivel DENSE_RANK() alwaysincrements by 1, never skipping a value.
  • ROW_NUMBER(): x=5, row_num is 4.
  • aggregált analitikus függvényfogalmak

    az aggregált függvény olyan függvény, amely az értékek aset-jén számítást végez. A legtöbb aggregált funkció ananalitikus funkcióban használható. Ezeket az aggregált funkciókat nevezikgregálja az analitikus funkciókat.

    aggregált analitikus függvények esetén a OVER záradékot csatolják a függvényhíváshoz; a függvényhívás szintaxisa egyébként változatlan marad.Az aggregált függvény társaikhoz hasonlóan ezek az analitikus függvények is végrehajtanakgregációk, de kifejezetten az egyes sorok megfelelő ablakkerete felett.Ezeknek az analitikus függvényeknek az eredményadattípusai megegyeznek a függvény társaival.

    analitikus függvény példák

    ezekben a példákban a kiemelt elem az aktuális sor. A boldeditems azok a sorok, amelyek szerepelnek az elemzésben.

    a példákban használt közös táblázatok

    a következő táblázatokat használják a következő összesített analitikai példákban: ProduceEmployeesés Farm.

    néhány példa a 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 |+-------------------------------------+

    néhány példa a 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 |+-------------------------------------+

    néhány példa a 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 |+-------------------------------------+

    kiszámol egy nagy összeget

    Ez a Producetáblázat összes elemének nagyösszegét számítja.

    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    • (narancs, alma, hagyma, káposzta, saláta, kelkáposzta) = 54 teljes vásárlások
    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 |+-------------------------------------------------------+

    Számítási egy részösszeg

    Ez a kiszámítja egy részösszeg minden kategóriában aProduce táblázat.

    • gyümölcs
      • (narancs, alma) = 10 teljes vásárlások
      • (narancs, alma) = 10 teljes vásárlások
    • növényi
      • (hagyma, káposzta, saláta, kelkáposzta) = 44 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 44 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 44 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 44 teljes vásárlások
    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 |+-------------------------------------------------------+

    Számítási halmozott összeg

    Ez a kiszámítja a halmozott összeg minden kategóriában aProduce táblázat. Az összeget a ORDER BY záradék alapján definiált teoreder alapján számítják ki.

    • gyümölcs
      • (narancs, alma) = 2 teljes vásárlások
      • (narancs, alma) = 10 teljes vásárlások
    • növényi
      • (hagyma, káposzta, saláta, kelkáposzta) = 2 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 11 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 21 teljes vásárlások
      • (hagyma, káposzta, saláta, kelkáposzta) = 44 teljes vásárlások
    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 |+-------------------------------------------------------+

    Ez nem ugyanaz, mint az előző példában. Nem kell hozzáCURRENT ROW mint egy határ, kivéve, ha azt szeretné, hogy az olvashatóság.

    SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS UNBOUNDED PRECEDING ) AS total_purchasesFROM Produce

    ebben a példában a Produce táblázat összes eleme szerepela partícióban. Csak az előző sorokat elemezzük. Az elemzés kettővel kezdődika partíció aktuális sora előtt.

    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = NULL
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = NULL
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 2
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 4
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 12
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 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 |+-------------------------------------------------------+

    Számítási egy mozgó átlag

    Ez a kiszámítja egy mozgó átlag, a Produce táblázat.Az alsó határ 1 sor a jelenlegi sor előtt. A felső határ 1 sor az aktuális sor után.

    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 2 átlagos vásárlások
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 4 átlag vásárlások
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 6.3333 átlagos vásárlások
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 9 átlagos vásárlások
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 14 átlagos vásárlások
    • (narancs, hagyma, alma, káposzta, saláta, kelkáposzta) = 16.5 átlagos vásárlások
    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 |+-------------------------------------------------------+

    kiszámítja a tételek száma tartományban

    Ez a példa megkapja az állatok száma, amelyek hasonló populációszámla aFarm táblázat.

    • (liba, kutya, ökör, kecske, kacsa, macska) = 4 állat 0-2 populációs tartomány között.
    • (liba, kutya, ökör, kecske, kacsa, macska) = 5 állat 1-3 populációs tartomány között.
    • (liba, kutya, ökör, kecske, kacsa, macska) = 5 állat 1-3 populációs tartomány között.
    • (liba, kutya, ökör, kecske, kacsa, macska) = 5 állat 1-3 populációs tartomány között.
    • (liba, kutya, ökör, kecske, kacsa, macska) = 4 állat 2-4 populációs tartomány között.
    • (liba, kutya, ökör, kecske, kacsa, macska) = 1 állat 22-24 populációs tartomány között.
    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 |+----------------------------------------------------------+

    Szerezd meg az egyes kategóriák legnépszerűbb tételét

    Ez a példa az egyes kategóriák legnépszerűbb elemét kapja. Meghatározza, hogy egy ablak sorai hogyan vannak felosztva és rendezve az egyes partíciókban. AProduce táblázat hivatkozik.

    • gyümölcs
      • (narancs, alma) = az apple legnépszerűbb
      • (narancs, alma) = az apple legnépszerűbb
    • növényi
      • (hagyma, káposzta, saláta, kelkáposzta) = kelkáposzta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = a kelkáposzta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = kelkáposzta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = a kelkáposzta legnépszerűbb
    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 |+----------------------------------------------------+

    az utolsó érték a tartomány

    Ez a példa lesz a legnépszerűbb elem az adott ablak keret is kapunk Produce asztal. Az ablakkeret legfeljebb három elemzést végezegy időben. Vessen egy pillantást a zöldségekmost_popular oszlopára.Ahelyett, hogy a legnépszerűbb elem egy adott kategóriában, ez lesz themost népszerű elem egy adott tartományban ebben a kategóriában.

    • gyümölcs
      • (narancs, alma) = az apple legnépszerűbb
      • (narancs, alma) = az apple legnépszerűbb
    • növényi
      • (hagyma, káposzta, saláta, kelkáposzta) = káposzta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = saláta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = kelkáposzta legnépszerűbb
      • (hagyma, káposzta, saláta, kelkáposzta) = kelkáposzta legnépszerűbb
    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 |+----------------------------------------------------+

    Ez a példa ugyanazt az eredményt adja, mint az előző példában, de kis nevű ablak úgynevezett item_window. Néhány ablak specifikáció közvetlenül a OVER záradékban van meghatározva, néhány pedig a megnevezett ablakban van meghatározva.

    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)

    számítási rang

    Ez a példa kiszámítja az egyes alkalmazottak rangját a részlegükön belül,a kezdő dátum alapján. Az ablak specifikációja közvetlenül meg van határozvaaz OVER záradékban. AEmployees táblázat hivatkozik.

    • osztály 1
      • (Jacob, Anthony, Andrew) = Rendel, rang 1 Jacob
      • (Jacob, Anthony, Andrew) = Hozzárendelése rank 2 Anthony
      • (Jacob, Anthony, Andrew) = Rendel, rang 3 Andrew
    • osztály 2
      • (Isabella, Daniel, Jose) = Rendel, rang 1 Isabella
      • (Isabella, Daniel, Jose) = Hozzárendelése rank 2 Daniel
      • (Isabella, Daniel, Jose) = Rendel, rang 3 Jose
    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 |+--------------------------------------------+

    egy nevű ablak, ablak keret záradék

    megadhatjuk a logika egy nevű ablakban, s egy részét a awindow frame záradék. Ez a logika kombinálódik. Itt van egy példa aProduce táblázat használatával.

    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 |+-------------------------------------------------------+

    az előző eredményeket ezekkel a példákkal is megkaphatja:

    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)

    a következő példa hibát okoz, mivel az ablakkeret záradék kétszer lett definiálva:

    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)