SQL PARTITION BY záradékkal

Sql Partition By Zaradekkal



Az SQL-ben a PARTITION BY záradék lehetővé teszi egy adott lekérdezés eredményhalmazának felosztását vagy particionálását egy vagy több oszlop alapján különböző csoportokra. Az eredményül kapott partíciók nagyon hasznosak lehetnek, különösen akkor, ha minden partícióra (egyedileg) kell számításokat végrehajtani, vagy az összesített függvényeket kell alkalmazni az egyes csoportokon belül.

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:



  1. oszlop1, oszlop2 – Ez azokra az oszlopokra vonatkozik, amelyeket be kívánunk venni az eredménykészletbe.
  2. 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.