SQL-case med sum og gruppe efter klausul

Sql Case Med Sum Og Gruppe Efter Klausul



I denne øvelse lærer vi, hvordan du bruger CASE-sætningen med SUM-funktionen og en GROUP BY-sætning.

Denne øvelse dækker ikke det grundlæggende ved at arbejde med hverken SQL Case-sætning, sum()-funktionen eller GROUP BY-sætningen. Hvis du leder efter det grundlæggende i disse SQL-funktioner, så tjek vores tutorials om emnerne for at finde yderligere.







Problem:

Lad os sige, at vi har en tabel med navnet 'ordrer', og vi ønsker at få det samlede salg for hver kunde, der er grupperet efter kunde-id, men vi ønsker også at beregne en rabat for kunder, der har afgivet mere end to ordrer.



Tabellen er vist i følgende:



OPRET TABELbestillinger (
order_id INT PRIMÆR NØGLE,
kunde_id INT,
produkt-id INT,
ordre_dato DATE,
mængde INT,
pris DECIMAL ( 10 , 2 )
) ;


Indsæt et eksempeldata i tabellen som vist i følgende:





INDSÆT I ordrer ( ordre-id, kunde-id, produkt-id, ordredato, antal, pris )
VÆRDIER
( 1 , 101 , 1 , '2022-04-01' , 2 , 10,99 ) ,
( 2 , 102 , 2 , '2022-04-01' , 1 , 19,99 ) ,
( 3 , 103 , 1 , '2022-04-02' , 3 , 8,99 ) ,
( 4 , 101 , 3 , '2022-04-03' , 2 , 15,99 ) ,
( 5 , 102 , 1 , '2022-04-03' , 1 , 12,99 ) ,
( 6 , 104 , 2 , '2022-04-04' , 4 , 7,99 ) ,
( 7 , 103 , 3 , '2022-04-05' , 2 , 21,99 ) ,
( 8 , 101 , 2 , '2022-04-06' , 1 , 18,99 ) ,
( 9 , 104 , 1 , '2022-04-07' , 2 , 9,99 ) ,
( 10 , 102 , 3 , '2022-04-07' , 3 , 14,99 ) ;


Dette skulle oprette en tabel som følger:



SQL-case med sum og gruppe efter klausul

For at hente det samlede salg for hver kunde, der er grupperet efter ID og beregne rabatten for kunder, der har afgivet mere end to ordrer, kan vi bruge CASE-erklæringen sammen med SUM- og GROUP BY-klausulen som vist i følgende:

Vælg orders.customer_id, sum ( ordrer.mængde * ordrer.pris * ( sag når tæller ( * ) > 2 derefter 0,9 andet 1 ende ) ) som total_salg fra ordrer;


I det givne eksempel bruger vi SQL CASE-sætningen til at kontrollere, om kunden har afgivet mere end to ordrer.

Hvis en kunde har afgivet mere end to ordrer, multiplicerer vi total_sales med 0,9, hvilket giver 10% rabat.

Konklusion

Vi diskuterede, hvordan vi kan bruge SQL CASE-sætningen med SUM() og GROUP BY-sætningen.