SQL kumulativ sum

Sql Kumulativ Sum



I SQL refererer en kumulativ sum til en metode, der giver os mulighed for at beregne den løbende sum af en numerisk kolonne i en databasetabel. En kumulativ sum kommer i spil i en lang række scenarier, såsom sporing af fremskridt eller beregning af de rullende gennemsnit af en given værdi.

I denne tutorial lærer vi, hvordan man implementerer og udnytter den kumulative sum i SQL ved hjælp af forskellige metoder og teknikker.







Eksempel på data

For bedre at forstå, hvordan vi kan implementere og bruge den kumulative sum, lad os starte med at opsætte en grundlæggende tabel med eksempeldata. Dette giver os mulighed for at demonstrere, hvordan alle metoderne fungerer hurtigt og effektivt i dette indlæg.



Start med at oprette en grundlæggende tabel, der gemmer produktinformationen.



CREATE TABLE produkter (
produkt_id INT PRIMÆR NØGLE,
produktnavn VARCHAR ( 255 ) ,
pris DECIMAL ( 10 , 2 )
) ;





Dette skulle oprette en ny tabel kaldet 'produkter', der gemmer produkt-id'et, produktnavnet og prisen på hvert produkt.

Vi kan derefter fortsætte med at tilføje et eksempeldata som vist i følgende eksempelindsæt-sætninger:



INDSÆT I produkter ( produkt_id, produktnavn, pris )
VÆRDIER
( 1 , 'Visual Studio Code' , 10.00 ) ,
( 2 , 'Sublim tekst' , 80,00 ) ,
( 3 , 'PyCharm Professional' , 199,00 ) ,
( 4 , 'Eclipse IDE' , 30.00 ) ,
( 5 , 'IntelliJ IDEA Ultimate' , 699,00 ) ,
( 6 , 'GitHub Desktop' , 20.00 ) ,
( 7 , 'Vent-software' , 10.00 ) ,
( 8 , 'Xcode' , 660,00 ) ,
( 9 , 'NetBeans' , 0,00 ) ,
( 10 , 'Atom' , 60,00 ) ;

BEMÆRK: De givne data er fuldstændig fiktive. Det repræsenterer ikke den faktiske prissætning af nogen af ​​de anførte varer.

Den resulterende tabel er som følger:

SQL Kumulativ Sum (Selv Join)

En af de teknikker, som vi kan bruge til at udføre en kumulativ sum på en given kolonne, er at bruge selvsammenføjningsmetoden. En fordel ved denne metode er, at den virker i næsten alle SQL-databaser, selv dem, der ikke understøtter Window-funktionerne.

Tag for eksempel den tidligere 'produkter'-tabel. Vi kan oprette den kumulative sum af priskolonnen som vist i følgende forespørgsel:

VÆLG
p1.product_id,
p1.produktnavn,
p1.pris,
SUM ( p2.pris ) AS kumulativ_sum
FRA
produkter p1
TILSLUTTE
produkter p2

p1.produkt_id > = p2.produkt_id
GRUPPE EFTER
p1.product_id,
p1.produktnavn,
p1.pris
BESTIL EFTER
p1.produkt_id;

Har du bemærket, hvordan forespørgslen fungerer? Hvis ikke, så hold dig til os, mens vi forklarer det trin for trin.

I den givne eksempelforespørgsel starter vi med at oprette to aliaser - 'p1' og 'p2' - for tabellen 'produkter', som gør det muligt for os at udføre en selv-join.

Vi fortsætter derefter med at forbinde 'p1' og 'p2' på betingelse af, at 'product_id' for 'p1' er større end eller lig med 'product_id' for 'p2'.

I næste trin kalder vi sum()-funktionen, som grundlæggende beregner den kumulative sum af priserne for hver række.

Til sidst grupperer vi resultaterne ved hjælp af 'product_id', 'product_name' og 'price' og bestiller resultaterne.

Efter denne operation skulle vi have en kumulativ sum for hver post som vist i den resulterende tabel som vist i følgende:

Som du kan se, får vi den samlede sum af alle de foregående rækker. Den sidste række skal indeholde den samlede sum af alle de foregående rækker.

SQL kumulativ sum (vinduefunktioner)

En mere effektiv og praktisk måde at beregne den kumulative sum i SQL er at udnytte vinduesfunktionerne, når de understøttes.

Hvis du har en database såsom SQL Server, PostgreSQL eller MySQL version 8.0 og nyere, er dette den mest nyttige og anbefalede metode til at bestemme den kumulative sum af en given kolonne.

Tag et kig på eksemplet som vist i det følgende:

VÆLG
produkt_id,
produktnavn,
pris,
SUM ( pris ) OVER ( BESTIL EFTER product_id ) AS kumulativ_sum
FRA
Produkter;

I dette tilfælde starter vi med at vælge kolonnerne 'product_id', 'product_name' og 'price' fra tabellen 'products'.

Vi bruger derefter SUM()-funktionen som en vinduesfunktion ved hjælp af OVER-sætningen.

I OVER-klausulen specificerer vi ORDER BY-klausulen, som definerer rækkefølgen, hvori den kumulative sum beregnes.

Dette skulle returnere et lignende output som vist i følgende:

Du vil bemærke, at brugen af ​​vinduesfunktionerne er mere sammenhængende, effektiv og læsbar sammenlignet med at bruge selvforbindelser.

Konklusion

I denne tutorial lærte vi alt om kumulative summer i SQL. Vi dækkede også, hvordan man bruger selv-joins- og vinduesfunktionerne til at udføre den kumulative sum i SQL.