SQL PARTITION AYON SA Sugnay

Sql Partition Ayon Sa Sugnay



Sa SQL, ang PARTITION BY clause ay nagpapahintulot sa amin na hatiin o hatiin ang resultang set ng isang naibigay na query sa iba't ibang grupo batay sa isa o higit pang mga column. Ang mga resultang partisyon ay maaaring maging kapaki-pakinabang lalo na kapag kailangan mong gawin ang mga kalkulasyon sa bawat partition (indibidwal) o ilapat ang pinagsama-samang mga function sa loob ng bawat pangkat.

Sa tutorial na ito, malalaman natin ang tungkol sa mga gumagana ng PARTITION BY clause sa SQL at tuklasin kung paano natin ito magagamit para hatiin ang data para sa isang mas butil na subset.

Syntax:

Magsimula tayo sa syntax ng PARTITION BY clause. Maaaring nakadepende ang syntax sa konteksto kung saan mo ito ginagamit ngunit narito ang pangkalahatang syntax:







PUMILI ng column1, column2, ...

OVER (PARTITION BY partition_column1, partition_column2, ...)

MULA sa table_name

Ang ibinigay na syntax ay kumakatawan sa mga sumusunod na elemento:



  1. column1, column2 – Ito ay tumutukoy sa mga column na gusto naming isama sa set ng resulta.
  2. PARTITION BY columns – Tinutukoy ng clause na ito kung paano namin gustong hatiin o ipangkat ang data.

Sample na data

Gumawa tayo ng basic table na may sample na data para ipakita kung paano gamitin ang PARTITION BY clause. Para sa halimbawang ito, gumawa tayo ng pangunahing talahanayan na nag-iimbak ng impormasyon ng produkto.



GUMAWA NG MGA produkto ng TABLE (
product_id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR( 255 ),
kategorya VARCHAR( 255 ),
DECIMAL ng presyo( 10 , 2 ),
dami INT,
expiration_date DATE,
barcode BIGINT
);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Chef Hat 25cm' ,
'bakery' ,
24.67 ,
57 ,
'2023-09-09' ,
2854509564204 );

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Mga Itlog ng Pugo - Naka-kahong' ,
'pantry' ,
17.99 ,
67 ,
'2023-09-29' ,
1708039594250 );

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Kape - Egg Nog Capuccino' ,
'bakery' ,
92.53 ,
10 ,
'2023-09-22' ,
8704051853058 );

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Pear - Prickly' ,
'bakery' ,
65.29 ,
48 ,
'2023-08-23' ,
5174927442238 );

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Pasta - Buhok ng Anghel' ,
'pantry' ,
48.38 ,
59 ,
'2023-08-05' ,
8008123704782 );

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Alak - Prosecco Valdobiaddene' ,
'produce' ,
44.18 ,
3 ,
'2023-03-13' ,
6470981735653 );

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Pastry - French Mini Assorted' ,
'pantry' ,
36.73 ,
52 ,
'2023-05-29' ,
5963886298051 );

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Orange - Canned, Mandarin' ,
'produce' ,
65.0 ,
1 ,
'2023-04-20' ,
6131761721332 );

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Baboy - Balikat' ,
'produce' ,
55.55 ,
73 ,
'2023-05-01' ,
9343592107125 );

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ( 'Dc Hikiage Hira Huba' ,
'produce' ,
56.29 ,
53 ,
'2023-04-14' ,
3354910667072 );

Kapag mayroon na kaming sample na setup ng data, maaari na kaming magpatuloy at gamitin ang PARTITION BY clause.





Pangunahing Paggamit

Ipagpalagay na gusto naming kalkulahin ang kabuuang mga item para sa bawat kategorya ng produkto sa nakaraang talahanayan. Maaari naming gamitin ang PARTITION BY upang hatiin ang mga item sa mga natatanging kategorya at pagkatapos ay matukoy ang kabuuan ng dami sa bawat kategorya.

Ang isang halimbawa ay ang sumusunod:



PUMILI
pangalan ng Produkto,
kategorya,
dami,
SUM(dami) OVER (PARTITION BY category) BILANG kabuuang_item
MULA SA
mga produkto;

Pansinin na sa ibinigay na halimbawa, hinahati namin ang data gamit ang column na 'kategorya'. Pagkatapos ay gagamitin namin ang SUM() aggregate function upang matukoy ang kabuuang mga item sa bawat kategorya nang hiwalay. Ipinapakita ng resulta ang kabuuang mga item sa bawat kategorya.

Gamit ang PARTITION BY Clause

Upang ibuod, ang pinakakaraniwang kaso ng paggamit ng PARTITION BY clause ay kasabay ng mga function ng window. Ang function ng window ay inilalapat sa bawat partisyon nang hiwalay.

Ang ilan sa mga karaniwang function ng window na gagamitin sa PARTITION BY ay kinabibilangan ng mga sumusunod:

  • SUM() – Kalkulahin ang kabuuan ng isang column sa loob ng bawat partition.
  • AVG() – Compute ang average ng isang column sa loob ng bawat partition.
  • COUNT() – Bilangin ang bilang ng mga row sa loob ng bawat partition.
  • ROW_NUMBER() – Magtalaga ng natatanging row number sa bawat row sa loob ng bawat partition.
  • RANK() – Magtalaga ng ranggo sa bawat row sa loob ng bawat partition.
  • DENSE_RANK() – Magtalaga ng siksik na ranggo sa bawat row sa loob ng bawat partition.
  • NTILE() – Hatiin ang data sa dami sa loob ng bawat partition.

Ayan yun!

Konklusyon

Sa tutorial na ito, natutunan namin kung paano magtrabaho kasama ang PARTITION BY clause sa SQL upang hatiin ang data sa iba't ibang mga segment at pagkatapos ay maglapat ng isang partikular na operasyon sa bawat isa sa mga resultang partisyon nang hiwalay.