SQL PARTITION BY klauzula

Sql Partition By Klauzula



U SQL-u klauzula PARTITION BY omogućuje nam da podijelimo ili particioniramo skup rezultata danog upita u različite grupe na temelju jednog ili više stupaca. Rezultirajuće particije mogu biti vrlo korisne posebno kada trebate izvršiti izračune za svaku particiju (pojedinačno) ili primijeniti agregatne funkcije unutar svake grupe.

U ovom vodiču naučit ćemo o radu klauzule PARTITION BY u SQL-u i otkriti kako je možemo koristiti za particioniranje podataka za precizniji podskup.

Sintaksa:

Počnimo sa sintaksom klauzule PARTITION BY. Sintaksa može ovisiti o kontekstu u kojem je koristite, ali ovdje je opća sintaksa:







SELECT stupac1, stupac2, ...

PREKO (PARTICIJA PO particija_stupac1, particija_stupac2, ...)

FROM naziv_tablice

Dana sintaksa predstavlja sljedeće elemente:



  1. stupac1, stupac2 – Ovo se odnosi na stupce koje želimo uključiti u skup rezultata.
  2. PARTICIONIRANJE PO stupcima – Ova klauzula definira kako želimo particionirati ili grupirati podatke.

Uzorak podataka

Kreirajmo osnovnu tablicu s oglednim podacima da bismo pokazali kako koristiti klauzulu PARTITION BY. Za ovaj primjer, stvorimo osnovnu tablicu koja pohranjuje podatke o proizvodu.



CREATE TABLE proizvodi (
product_id INT PRIMARY KEY AUTO_INCREMENT,
naziv_proizvoda VARCHAR( 255 ),
kategorija VARCHAR( 255 ),
cijena DECIMAL( 10 , 2 ),
količina INT,
datum_istjecanja DATE,
crtični kod BIGINT
);

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Kuharska kapa 25 cm' ,
'pekara' ,
24.67 ,
57 ,
'2023-09-09' ,
2854509564204 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Prepeličja jaja - konzervirana' ,
'ostava' ,
17.99 ,
67 ,
'2023-09-29' ,
1708039594250 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Kava - Egg Nog Capuccino' ,
'pekara' ,
92.53 ,
10 ,
'22.9.2023' ,
8704051853058 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Kruška - bodljikava' ,
'pekara' ,
65.29 ,
48 ,
'2023-08-23' ,
5174927442238 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Tjestenina - anđeoska kosa' ,
'ostava' ,
48.38 ,
59 ,
'2023-08-05' ,
8008123704782 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Vino - Prosecco Valdobiaddene' ,
'proizvesti' ,
44.18 ,
3 ,
'2023-03-13' ,
6470981735653 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Slastice - francuski mini izbor' ,
'ostava' ,
36.73 ,
52 ,
'2023-05-29' ,
5963886298051 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Naranča - konzervirana, mandarina' ,
'proizvesti' ,
65.0 ,
1 ,
'20.4.2023' ,
6131761721332 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Svinjetina - plećka' ,
'proizvesti' ,
55.55 ,
73 ,
'2023-05-01' ,
9343592107125 );

umetnuti
u
proizvodi (ime_proizvoda,
kategorija,
cijena,
količina,
Datum isteka roka trajanja,
crtični kod)
vrijednosti ( 'Dc Hikiage Hira Huba' ,
'proizvesti' ,
56.29 ,
53 ,
'2023-04-14' ,
3354910667072 );

Nakon što imamo ogledne postavke podataka, možemo nastaviti i koristiti klauzulu PARTITION BY.





Osnovna upotreba

Pretpostavimo da želimo izračunati ukupne stavke za svaku kategoriju proizvoda u prethodnoj tablici. Možemo koristiti PARTICION BY kako bismo podijelili stavke u jedinstvene kategorije i zatim odredili ukupnu količinu u svakoj kategoriji.

Primjer je sljedeći:



IZABERI
ime proizvoda,
kategorija,
količina,
SUM(količina) PREKO (PARTICIJA PO kategoriji) KAO total_items
IZ
proizvodi;

Primijetite da u navedenom primjeru podatke dijelimo pomoću stupca 'kategorija'. Zatim koristimo agregatnu funkciju SUM() za određivanje ukupnih stavki u svakoj kategoriji zasebno. Rezultat pokazuje ukupan broj stavki u svakoj kategoriji.

Korištenje klauzule PARTITION BY

Ukratko, najčešći slučaj upotrebe klauzule PARTITION BY je u kombinaciji s funkcijama prozora. Funkcija prozora primjenjuje se na svaku particiju posebno.

Neke od uobičajenih funkcija prozora za korištenje s PARTITION BY uključuju sljedeće:

  • SUM() – Izračunajte zbroj stupca unutar svake particije.
  • AVG() – Izračunajte prosjek stupca unutar svake particije.
  • COUNT() – Izbrojite broj redaka unutar svake particije.
  • ROW_NUMBER() – Dodijelite jedinstveni broj retka svakom retku unutar svake particije.
  • RANK() – Dodijelite rang svakom retku unutar svake particije.
  • DENSE_RANK() – Dodijelite gusti rang svakom retku unutar svake particije.
  • NTILE() – Podijelite podatke u kvantile unutar svake particije.

To je to!

Zaključak

U ovom smo vodiču naučili kako raditi s klauzulom PARTITION BY u SQL-u za particioniranje podataka u različite segmente i zatim primijeniti određenu operaciju na svaku od rezultirajućih particija zasebno.