Ebben az oktatóanyagban megismerjük a PARTITION BY záradék működését az SQL-ben, és megtudjuk, hogyan használhatjuk fel az adatok particionálására egy részletesebb részhalmazhoz.
Szintaxis:
Kezdjük a PARTITION BY záradék szintaxisával. A szintaxis függhet attól, hogy milyen környezetben használja, de itt van az általános szintaxis:
SELECT oszlop1, oszlop2, ...
OVER (PARTÍCIÓ SZERINT partíció_oszlop1, partíció_oszlop2, ...)
FROM tábla_neve
A megadott szintaxis a következő elemeket képviseli:
- oszlop1, oszlop2 – Ez azokra az oszlopokra vonatkozik, amelyeket be kívánunk venni az eredménykészletbe.
- PARTITION BY oszlopok – Ez a záradék határozza meg, hogyan kívánjuk particionálni vagy csoportosítani az adatokat.
Minta adat
Hozzunk létre egy alaptáblázatot egy mintaadatokkal a PARTITION BY záradék használatának bemutatására. Ehhez a példához hozzunk létre egy alaptáblázatot, amely a termékinformációkat tárolja.
CREATE TABLE termékek (
product_id INT ELSŐDLEGES KULCS AUTO_INCREMENT,
termék_neve VARCHAR( 255 ),
kategória VARCHAR( 255 ),
ár DECIMAL( 10 , 2 ),
mennyiség INT,
expiration_date DATE,
vonalkód BIGINT
);
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Séf kalap 25 cm' ,
'pékség' ,
24.67 ,
57 ,
'2023-09-09' ,
2854509564204 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( „Fürjtojás – konzerv” ,
'éléskamra' ,
17.99 ,
67 ,
'2023-09-29' ,
1708039594250 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Coffee - Egg Nog Capuccino' ,
'pékség' ,
92,53 ,
10 ,
'2023-09-22' ,
8704051853058 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Körte – tüskés' ,
'pékség' ,
65.29 ,
48 ,
'2023-08-23' ,
5174927442238 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'tészta - angyalhaj' ,
'éléskamra' ,
48.38 ,
59 ,
'2023-08-05' ,
8008123704782 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Bor - Prosecco Valdobiaddene' ,
'termelni' ,
44.18 ,
3 ,
'2023-03-13' ,
6470981735653 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Püstök - francia mini válogatott' ,
'éléskamra' ,
36,73 ,
52 ,
'2023-05-29' ,
5963886298051 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Narancs - konzerv, mandarin' ,
'termelni' ,
65,0 ,
1 ,
'2023-04-20' ,
6131761721332 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Sertés lapocka' ,
'termelni' ,
55.55 ,
73 ,
'2023-05-01' ,
9343592107125 );
betét
-ba
termékek (terméknév,
kategória,
ár,
Mennyiség,
lejárati dátum,
vonalkód)
értékek ( 'Dc Hikiage Hira Huba' ,
'termelni' ,
56.29 ,
53 ,
'2023-04-14' ,
3354910667072 );
Miután megvan a mintaadat-beállítás, folytathatjuk és használhatjuk a PARTITION BY záradékot.
Alapvető használat
Tegyük fel, hogy az előző táblázatban szereplő egyes termékkategóriák összes tételét szeretnénk kiszámítani. A PARTITION BY segítségével egyedi kategóriákra oszthatjuk a tételeket, majd meghatározhatjuk az egyes kategóriákban lévő mennyiségek összegét.
Egy példa a következő:
KIVÁLASZTÁS
termék név,
kategória,
Mennyiség,
SUM(mennyiség) OVER (PARTÍCIÓ kategória szerint) AS total_items
TÓL TŐL
Termékek;
Figyeljük meg, hogy az adott példában az adatokat a „kategória” oszlop segítségével particionáljuk. Ezután a SUM() összesítő függvénnyel határozzuk meg az egyes kategóriák összes tételét külön-külön. Az eredmény az egyes kategóriák összes tételét mutatja.
A PARTITION BY záradék használata
Összefoglalva, a PARTITION BY záradék leggyakrabban használt esete az ablakfüggvényekkel kapcsolatos. Az ablak funkció minden partícióra külön kerül alkalmazásra.
A PARTITION BY-val használható általános ablakfunkciók közül néhány a következő:
- SZUM() – Az egyes partíciókon belüli oszlopok összegének kiszámítása.
- AVG() – Az egyes partíciókon belüli oszlopok átlagának kiszámítása.
- COUNT() – Megszámolja az egyes partíciókon belüli sorok számát.
- ROW_NUMBER() – Rendeljen egyedi sorszámot minden sorhoz az egyes partíciókon belül.
- RANK() – Rendeljen rangot minden sorhoz az egyes partíciókon belül.
- DENSE_RANK() – Rendeljen sűrű rangot minden sorhoz az egyes partíciókon belül.
- NTILE() – Ossza fel az adatokat kvantilisokra az egyes partíciókon belül.
Ez az!
Következtetés
Ebben az oktatóanyagban megtanultuk, hogyan kell az SQL-ben a PARTITION BY záradékkal dolgozni az adatok különböző szegmensekre történő particionálásához, majd az eredményül kapott partíciók mindegyikére külön-külön történő végrehajtásához.