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