I den här handledningen kommer vi att lära oss om hur PARTITION BY-satsen fungerar i SQL och upptäcka hur vi kan använda den för att partitionera data för en mer detaljerad delmängd.
Syntax:
Låt oss börja med syntaxen för PARTITION BY-satsen. Syntaxen kan bero på i vilket sammanhang du använder den men här är den allmänna syntaxen:
VÄLJ kolumn1, kolumn2, ...
ÖVER (PARTITION BY partition_column1, partition_column2, ...)
FRÅN tabellnamn
Den givna syntaxen representerar följande element:
- kolumn1, kolumn2 – Detta hänvisar till de kolumner som vi vill inkludera i resultatuppsättningen.
- PARTITION BY kolumner – Denna sats definierar hur vi vill partitionera eller gruppera data.
Stickprov
Låt oss skapa en grundläggande tabell med exempeldata för att visa hur man använder PARTITION BY-satsen. För det här exemplet, låt oss skapa en grundläggande tabell som lagrar produktinformationen.
CREATE TABLE-produkter (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produktnamn VARCHAR( 255 ),
kategori VARCHAR( 255 ),
pris DECIMAL( 10 , 2 ),
kvantitet INT,
expiration_date DATE,
streckkod BIGINT
);
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Kockmössa 25cm' ,
'bageri' ,
24,67 ,
57 ,
'2023-09-09' ,
2854509564204 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Vaktelägg - på burk' ,
'skafferi' ,
17,99 ,
67 ,
'2023-09-29' ,
1708039594250 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Kaffe - Egg Nog Capuccino' ,
'bageri' ,
92,53 ,
10 ,
'2023-09-22' ,
8704051853058 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Pear - Prickly' ,
'bageri' ,
65,29 ,
48 ,
'2023-08-23' ,
5174927442238 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Pasta - Angel Hair' ,
'skafferi' ,
48,38 ,
59 ,
'2023-08-05' ,
8008123704782 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Vin - Prosecco Valdobiaddene' ,
'producera' ,
44,18 ,
3 ,
'2023-03-13' ,
6470981735653 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Konditori - franska mini-assorterade' ,
'skafferi' ,
36,73 ,
52 ,
'2023-05-29' ,
5963886298051 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Apelsin - konserverad, mandarin' ,
'producera' ,
65,0 ,
1 ,
'2023-04-20' ,
6131761721332 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Fläsk - Shoulder' ,
'producera' ,
55,55 ,
73 ,
'2023-05-01' ,
9343592107125 );
Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ( 'Dc Hikiage Hira Huba' ,
'producera' ,
56,29 ,
53 ,
'2023-04-14' ,
3354910667072 );
När vi har exempeldatainställningen kan vi fortsätta och använda PARTITION BY-satsen.
Grundläggande användning
Anta att vi vill beräkna det totala antalet varor för varje produktkategori i föregående tabell. Vi kan använda PARTITION BY för att dela in föremålen i unika kategorier och sedan bestämma summan av kvantiteten i varje kategori.
Ett exempel är följande:
VÄLJ
produktnamn,
kategori,
kvantitet,
SUM(kvantitet) ÖVER (PARTITION EFTER kategori) SOM totala_artiklar
FRÅN
Produkter;
Lägg märke till att i det givna exemplet partitionerar vi data med hjälp av kolumnen 'kategori'. Vi använder sedan aggregatfunktionen SUM() för att bestämma det totala antalet objekt i varje kategori separat. Resultatet visar det totala antalet föremål i varje kategori.
Använda PARTITION BY-klausulen
För att sammanfatta, är det vanligaste användningsfallet för PARTITION BY-satsen i kombination med fönsterfunktionerna. Fönsterfunktionen tillämpas på varje partition separat.
Några av de vanliga fönsterfunktionerna att använda med PARTITION BY inkluderar följande:
- SUM() – Beräkna summan av en kolumn inom varje partition.
- AVG() – Beräkna medelvärdet av en kolumn inom varje partition.
- COUNT() – Räkna antalet rader inom varje partition.
- ROW_NUMBER() – Tilldela ett unikt radnummer till varje rad inom varje partition.
- RANK() – Tilldela en rangordning till varje rad inom varje partition.
- DENSE_RANK() – Tilldela en tät rangordning till varje rad inom varje partition.
- NTILE() – Dela upp data i kvantiler inom varje partition.
Det är allt!
Slutsats
I den här handledningen lärde vi oss hur man arbetar med PARTITION BY-satsen i SQL för att partitionera data i olika segment och sedan tillämpa en specifik operation på var och en av de resulterande partitionerna separat.