Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

Az SQL, mint DBMS lekérdezési nyelv sokoldalúsága az évek során nőtt. Kiterjedt használhatósága és sokoldalúsága minden adatelemző örök kedvencévé teszi.

Az SQL szokásos függvényein kívül jó néhány haladó szintű funkció létezik. Ezeket a függvényeket általában ablakfüggvényeknek nevezik. Ha összetett adatokkal foglalkozik, és speciális számításokat szeretne végezni, használhatja ezeket az adatok legjobb felhasználásához.

Az ablakfunkciók jelentősége

Az SQL-ben számos ablakfüggvény áll rendelkezésre, és mindegyik segít egy sor számítás elvégzésében. A partíciók létrehozásától a sorok rangsorolásáig vagy a sorszámok hozzárendeléséig ezek az ablakfunkciók mindenre képesek.

Az ablakfüggvények akkor hasznosak, ha aggregált függvényeket egy adott adatkészletre vagy sorok gyűjteményére alkalmaz. Ezek a funkciók túlmutatnak a GROUP BY által biztosított összesítő függvényeken. A fő különbség azonban az, hogy a csoportosítási funkcióval ellentétben az adatok nem egyesülnek egyetlen sorba.

instagram viewer

Az ablakon belül nem használhat ablakfüggvényeket AHOL, TÓL TŐL, és CSOPORTOSÍT nyilatkozatok.

Egy ablakfüggvény szintaxisa

Amikor bármely ablakfüggvényre hivatkozik, az alapértelmezett szintaktikai struktúrát kell követnie, hogy megfelelően működjön. Ha helytelenül strukturálja a parancsot, hibaüzenetet kap, és a kód nem fut le.

Íme az alapértelmezett szintaxis:

KIVÁLASZTÁS oszlopnév1,
{ablak_függvény}(oszlopnév2)
OVER([PARTÍCIÓ BY oszlopnév1] [ORDER BY oszlopnév3]) AS new_column
FROM tábla_neve;

Ahol:

  • oszlopnév1 az első oszlopnév, amelyet ki szeretne választani.
  • {ablak_funkció} egy összesítő függvény neve, például összeg, átlag, count, sorszám, rang vagy sűrű_rang.
  • oszlopnév2 annak az oszlopnak a neve, amelyre az ablak függvényt alkalmazza.
  • oszlopnév3 a harmadik oszlopnév, amely a partíció alapját fogja képezni.
  • new_column az új oszlop címkéje, amelyet a következővel alkalmazhat MINT kulcsszó.
  • táblázat_neve a forrástábla neve.

Az ablakfunkciók eltérnek néhánytól a legalapvetőbb SQL-parancsok. Az SQL összesítő függvényeivel ellentétben ezeket az ablakfüggvényeket speciális funkciók végrehajtására használhatja.

Az adatkészlet előkészítése

Használhatja a TÁBLÁZAT LÉTREHOZÁSA nyilatkozatot hozzon létre egy új táblát SQL-ben. Íme egy példaadatkészlet, amelyet az útmutató néhány ablakfunkció meghatározásához használ:

Rendelés dátuma

Kategória

Szín

Eladási ár

Mennyiség

08-11-2016

Telefonok

Fekete

907.152

6

12-06-2016

Kötőanyagok

Zöld

18.504

3

11-10-2015

Készülékek

Sárga

114.9

5

11-10-2015

Táblázatok

Barna

1706.184

9

09-06-2014

Telefonok

Piros

911.424

4

09-06-2014

Papír

fehér

15.552

3

09-06-2014

Kötőanyagok

Fekete

407.976

3

09-06-2014

Készülékek

Sárga

68.81

5

09-06-2014

Kötőanyagok

Zöld

2.544

3

09-06-2014

Tárolás

narancs

665.88

6

09-06-2014

Tárolás

narancs

55.5

2

15-04-2017

Telefonok

Fekete

213.48

3

05-12-2016

Kötőanyagok

Zöld

22.72

4

22-11-2015

Készülékek

Zöld

60.34

7

22-11-2015

Székek

Sötétbarna

71.372

2

13-05-2014

Bútor

narancs

190.92

5

Az összegfüggvény magyarázata

Tegyük fel, hogy ki szeretné számítani a teljes értékesítést a kategóriaoszlopon belüli egyes értékekhez. A következőképpen teheti meg:

KIVÁLASZTÁSkategória, szín,
összeg (eladási_ár)
OVER (kategória szerinti rendezés) AS total_sales
FROM sahil.sample;

A fenti kódban az SQL utasítás lekéri a kategóriát és a színt az eredeti adatkészletből. Az összeg függvény összeadja az eladási_ár oszlopot. Ezt kategóriánként teszi, mivel az OVER záradék a kategóriaoszlop szerinti sorrendet határozza meg. A végeredmény a következő:

Az Avg() ablakfüggvény használata

Az összeg függvényhez hasonlóan az adatsoronkénti átlagot a átl funkció. Az összeg helyett egy oszlopot kap az átlagos eladásokkal.

KIVÁLASZTÁSkategória, szín,
átlagos (eladási_ár)
OVER (kategória szerinti rendezés) AS avg_sales
FROM sahil.sample;

Tanulja meg a Count() ablakfüggvény használatát

Az összeg és az átlag függvényekhez hasonlóan az SQL számlálóablak funkciója meglehetősen egyszerű, és ugyanazon a vonalon működik, mint a másik két függvény. Amikor átadja a számláló függvényt, az új oszlopban minden egyes érték teljes számát kapja meg.

Így számíthatja ki a számot:

KIVÁLASZTÁSkategória, szín,
szám (kategória)
OVER (kategória szerinti rendezés) AS item_count
FROM sahil.sample;

A Row_Number() ablakfüggvény

A fent felsorolt ​​egyéb ablakfüggvényektől eltérően a row_number() kissé eltérően működik. A row_number() függvény minden sorhoz sorszámot rendel, a záradék szerinti sorrendtől függően. A kezdő sor száma 1; a sor_szám minden sorhoz a végéig megfelelő értéket rendel.

Íme a row_number() függvény alapvető szerkezete:

KIVÁLASZTÁSkategória, szín,
sor_szám()
OVER (kategória szerinti rendezés) AS cikkszám
FROM sahil.sample;

De mi történik, ha minden kategóriaelemhez külön sorszámot szeretne rendelni? A fenti szintaxis gördülő sorozatszámot állít be, függetlenül a kategóriában tárolt elemektől. Például a készülékek kategóriájának rendelkeznie kell kizárólagos számozással, amelyet kötõanyag követ, és így tovább.

Használhatja a partíció funkciója ennek az egyszerű, de praktikus feladatnak a végrehajtásához. A partíció kulcsszó az egyes kategóriaelemek alapján kijelölt sorszámokat rendel hozzá.

KIVÁLASZTÁSkategória, szín,
sor_szám()
OVER (partíció kategória szerint sorrend kategória szerint) AS cikkszám
FROM sahil.sample;

A Rank() és a Dense_Rank() függvények

A rang() funkció másként működik, mint a sor_szám() funkció. A függvény szerinti sorrendben meg kell adnia az oszlop nevét, hogy ezt alapul vegye a rangértékek meghatározásához. Például a következő kódpéldában használhatja a színoszlopot a függvény szerinti sorrendben. A lekérdezés ezután ezt a sorrendet fogja használni, hogy minden sorhoz rangértéket rendeljen.

Az alábbi kódszintaxist használhatja rangfüggvény átadásához SQL-ben:

KIVÁLASZTÁSkategória, szín,
rang()
OVER (sorrend szín szerint) AS item_rank
FROM sahil.sample;

Vessen egy pillantást a kimenetre, hogy megértse, hogyan működik ez a funkció.

A függvény szerinti sorrend rendezi a színkategóriát, míg a rang függvény minden színhez rangot rendel. Mindazonáltal minden azonos színértéknek azonos a rangja, míg a különböző színeknek külön rangjuk van. A fekete szín háromszor fordul elő az adatkészleten belül; az 1-es, 2-es és 3-as rangérték hozzárendelése helyett a fekete színű elemek 1-es rangot kapnak.

A következő barna szín azonban a 2-es helyett 4-et kap. A rangfüggvény kihagyja az értékeket, és a következő kronológiai értéket rendeli a különböző bejegyzésekhez. Ha értelmesebb rangértéket szeretne hozzárendelni, használhatja a sűrű_rang() funkció.

A dense_rank függvény nem hagy ki semmilyen rangértéket a függvény szerinti sorrendben. Például az első három színelem (fekete) 1-es rangot kap. A következő szín (Brown) azonban nem 4-es, hanem 2-es rangot kap, ami a következő kronológiai szám a számozási listában. A dense_rank függvény praktikusabb ablakfüggvény, mivel értelmes értéket rendel az elemek listájához.

A következőképpen használhatja a dense_rank függvényt SQL-ben:

KIVÁLASZTÁSkategória, szín,
sűrű_rang()
OVER (sorrend szín szerint) AS item_rank
FROM sahil.sample;

És itt van egy példa arra, hogyan fog kinézni ennek a függvénynek a kimenete:

SQL-függvények a mentéshez

Az SQL ablakfunkciói ideálisak fejlett analitikai műveletek elvégzésére. Számos más SQL-parancsot is használhat azonban annak biztosítására, hogy számítási készségei kiválóak legyenek. Ha egyszerre több eredményt kombinál és kiszámít, semmi sem jobb, mint az SQL allekérdezések használata.

Az allekérdezések kiváló eszközt jelentenek a speciális funkciók végrehajtására, javítva az eredmények minőségét. Az óra igényétől függően személyre szabhatja lekérdezéseit, és hatékonyabbá teheti azokat, hogy megfeleljenek az Ön igényeinek.