sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan bruges SQL Server T-SQL-funktion SUM:5 Use Cases

T-SQL SUM-funktionen er en af ​​de grundlæggende funktioner. Dens formål er at beregne summen af ​​alle værdier i den angivne kolonne – bemærk, at den kun gælder for numeriske kolonner.

Nedenfor er syntaksen for SQL SUM.

-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )  

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • ALLE er en standardværdi, ikke obligatorisk at bestå. Det giver mulighed for at returnere summen af ​​alle værdier.
  • DISTINK specificerer, at det kun skal returnere summen af ​​unikke værdier, ignorere duplikerede værdier.
  • Udtryk er den nøjagtige eller omtrentlige numeriske datatypekategori, undtagen bit datatype.
  • OVER klausul med partition_by_clause og order_by_clause er til at bruge denne funktion på en bestemt partition.
    • partition_by_clause opdeler resultatsættet produceret af FROM-sætningen i partitioner, som funktionen anvendes på
    • order_by_clause bestemmer den logiske rækkefølge, som operationen udføres i.

For at demonstrere brugen af ​​SQL SUM-funktionen har jeg lavet en tabel med navnet Medarbejder . Den har 5 kolonner – navn , løn , leje , skat , og beskæftigelseskarakter . Følgende use cases vil være i fokus:

  1. Grundlæggende eller simpel brug af SUM-funktionen
  2. Brug af SUM med CASE-udtryk
  3. Brug af SUM med GROUP BY-sætning
  4. Brug af SUM med HAVING-sætning
  5. Anvendelse af SUM for flere eller komplekse aritmetiske udtryk

Vi lærer også andre use cases som at bruge SUM med WHERE-sætning, ORDER BY-sætning eller brug af DISTINCT i SUM-funktionen for at få summen af ​​unikke værdier. Men først ting først.

Use Case 1:Simple SQL SUM-funktion

Som nævnt ovenfor har jeg en tabel ved navn Medarbejder med få kolonner. Antag, at din virksomhed ønsker at vide, hvor meget løn de bruger på alle medarbejdere. For at få værdien skal du blot tilføje alle ansattes løn. SUM () vil gøre dit liv nemt ved at levere sådanne rapporter hurtigt.

Vi vil bruge funktionen SUM () på lønnen kolonne, og outputtet vil være den samlede lønomkostning brugt på alle virksomhedens ansatte:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]

Hvis du har en NULL-værdi i kolonnen, vil denne funktion ignorere den og fortsætte med den næste rækkeværdi. Du kan således have NULL for enhver medarbejder, der forlod organisationen – virksomheden betaler ikke noget til den ressource.

Du kan se outputtet nedenfor - det viser beløbet på $885000 brugt på ansattes lønninger:

Hvis der er duplikater værdier på enhver kolonne, og du vil have summen af ​​alle unikke værdier, kan du bruge DISTINCT argument:

USE DBName
GO
--Get the sum of all values from column salary
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

--Get the sum of all unique values from column salary
SELECT SUM(DISTINCT Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

Jeg har udført begge udsagn sammen. For det første var det den fra forrige trin med alle lønværdier. Den anden var for unikke værdier – den brugte DISTINCT argument.

Tag et kig på nedenstående skærmbillede - det viser output fra begge udsagn, og de er forskellige. Når jeg bruger SUM-funktionen for alle værdier som standard, er outputtet $885.000. Når jeg bruger DISTINCT argument for kun at få summen af ​​unikke værdier, outputtet er $65000.

Derfor har vi lignende værdier i denne kolonne. forretningsmæssigt betyder det, at vi har få medarbejdere, der modtager samme beløb som deres løn.

Dette eksempel viser brugen af ​​DISTINCT argument for at få summen af ​​alle unikke værdier. I praksis lader det os undgå duplikerede værdier fra det endelige resultat.

Vi kan også bruge Hvor klausul i SQL SUM (). Lad os sige, at din virksomhed ønsker at få de samlede omkostninger, den bruger for medarbejdere, der får mere end $100.000 i løn, og ikke en fast ansat for at forstå omkostningsfordelingen. HVOR klausul vil filtrere resultatet og angive de samlede omkostninger i henhold til forretningskrav.

I nedenstående T-SQL-sætning kan du se WHERE klausul tilføjet på Beskæftigelsesnatur kolonne. Denne kolonne fører en fortegnelse over hver medarbejder, uanset om de er fastansatte eller kontraktansatte.

Bemærk, at jeg har brugt AND-operatøren til at klubbe begge krav:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

Resultatet viser, at virksomheden bruger 240.000 USD på de ansatte, der modtager 100.000 USD eller mere, og ikke fastansatte.

Brug Case 2:SQL SUM-funktion med CASE-udtryk

I vores scenarie vil vi gerne vide, hvor mange medarbejdere der arbejder som fastansatte sammen med deres øvrige detaljer. for at få dette resultat kan vi bruge CASE udtryk i SUM () fungere. Selvom du nemt kan få dette resultat ved blot at sætte Hvor klausul, nogle gange har du brug for CASE og SUM i et komplekst forespørgselskrav.

Tag et kig på nedenstående T-SQL-sætning med CASE udtryk inde i SUM () funktion:

--USE SUM function with CASE expression
SELECT 
SUM(
CASE
  WHEN [Employment Nature] = ‘Permanent’ THEN 1 
  ELSE 0 
  END) As [Total Employees],
   FROM [dbo].[Employee]

Outputtet af ovenstående udsagn viser 4 – virksomheden har kun 4 fastansatte i henhold til deres optegnelser i Medarbejder tabel.

Lad os tage et andet eksempel på CASE med SUM () .

Mens vi undersøgte use case 1, fandt vi de samlede omkostninger brugt på kontraktansatte, som modtager $100000 eller mere i ovenstående afsnit under use case 1. Nu ønsker vi at finde antallet af sådanne medarbejdere. Og CASE udtryk kommer ind på billedet igen.

Vi kan bruge CASE i den samme T-SQL-sætning, der blev brugt før. Nedenfor er eksemplet:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost],
SUM(CASE WHEN [Employment Nature] = ‘Contractor’ AND Salary >100000 THEN 1
ELSE 0
END) AS [Contractors Headcount]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

Outputtet viser os 2 entreprenører, der arbejder og får mere end $100.000.

Du kan bruge forskellige aspekter af CASE udtryk i SELECT erklæring sammen med SUM () funktion til at opfylde dine forretningsbehov.

Brug Case 3:SQL SUM-funktion med GROUP BY

Lad os antage, at vores virksomhed ønsker at vide, hvor mange penge den i alt bruger på sine fastansatte, og hvor mange penge den bruger på kontraktansatte. Vi kan få dette resultat sat ved hjælp af SUM fungerer sammen med GRUPPER EFTER erklæring.

Se nedenstående T-SQL-erklæring. Jeg har brugt GROUP BY erklæring om beskæftigelsesnaturen kolonnen og anvendte SUM-funktionen på Løn kolonne for at få den samlede løn for hver type medarbejder kategoriseret under deres ansættelseskarakter.

USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]

Resultatsættet giver de samlede penge brugt på entreprenører og fastansatte. Hvis du tilføjer begge disse tal, vil deres sum være de samlede penge brugt på deres ansattes løn (sammenlign dette tal med det første skærmbillede af denne artikel).

USE Case 4:SQL SUM-funktion med HAVING-sætning

Nu vil vi undersøge brugen af ​​SUM-funktionen med HAVING- og GROUP BY-udsagn sammen. Vores eksempel vil vise listen over medarbejdere, der modtager mere end $150.000 om året. Vi kan få det ved blot at bruge SELECT-sætningen med WHERE-sætningen, men jeg vil vise dig, hvordan du får det samme resultat med HAVING, GROUP BY og SUM.

Der er 2 T-SQL scripts. Outputtet af begge sætninger er det samme, men det første script bruger en simpel SELECT-sætning, hvorimod den anden kode bruger SUM-funktionen sammen med GROUP BY- og HAVING-sætninger.

USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING
SELECT name, SUM(salary) AS [Salary]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Se output fra begge scripts:

Der er et andet aspekt ved at bruge disse udsagn. Jeg har bestået aritmetiske udtryk i SUM-funktionen for at få lejen og skat ansattes udgifter. Derefter ansøgte jeg GROUP BY og HAR erklæringer om Lønnen kolonne. Med enkle ord ville jeg gerne vide de samlede husleje- og skatteudgifter brugt af medarbejdere med en løn på $150.000 eller mere.

Jeg brugte også to forespørgsler. Den første viser detaljerne for alle medarbejdere, der modtager $150.000 eller mere. Dette output hentes kun til validering og verifikation. Den anden bruger SUM funktion på to kolonner (leje og skat ) som deres samlede udgifter. Så gælder GRUPPER EFTER og HAR klausuler:

USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING and GROUP BY
SELECT name, SUM( rent + tax) AS [Total Expenses]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Lad os analysere outputtet. Den første forespørgsel viser alle detaljer om medarbejdere med lønninger på $150.000 eller mere. Se nu på det andet forespørgselsresultat. Her har vi hentet medarbejderne og deres udgifter baseret på deres lønafskæring, som er $150.000 eller mere. På denne måde har vi bekræftet, at vores forespørgsel med SUM-, GROUP BY- og HAVING-sætningerne returnerer korrekte resultater.

Use Case 5:SQL SUM-funktion med flere aritmetiske udtryk

SUM-funktionen giver stor fleksibilitet, når det kommer til aritmetiske udtryk. Vi kan bruge flere aritmetiske udtryk, såsom at tilføje eller trække fra flere kolonneværdier, når det er nødvendigt. Lad os henvise til et eksempel.

Vi ønsker at trække en rapport om vores medarbejderes samlede besparelser. Der kan være forskellige kolonner af udgifter eller godtgørelser, såsom huslejegodtgørelse, rejsegodtgørelse, forplejning osv. Vores tabel Medarbejder har to kolonner relateret til medarbejdernes udgifter - lejen betalt for bolig og skatterne betalt til det offentlige. Du kan forstå konceptet og anvende det på flere kolonner på en lignende måde.

USE DBName
GO
--List table data for reference
SELECT *
FROM [dbo].[Employee]
GO

--SUM with multiple arithmetic expressions
SELECT name, SUM(salary – (rent + tax)) AS [Total Savings]
FROM [dbo].[Employee]
GROUP BY name
GO

Den første forespørgsel viser alle data fra tabellen Medarbejder . Vi vil bruge disse data som reference til at verificere vores faktiske output returneret af den anden forespørgsel om den samlede besparelse for hver medarbejder.

Det har vi fået ved at lægge alle udgifter sammen og derefter trække alle udgifter fra medarbejderens løn som angivet i SUM funktionserklæring. Du kan bekræfte det ved manuelt at beregne disse data fra det første resultatsæt for enhver medarbejder for at få det valideret.

Konklusion

Vi har undersøgt flere tilfælde af brug af SQL SUM-funktion med andre klausuler. Moderne digitale værktøjer til SQL Server-specialister kan i øvrigt forenkle disse opgaver drastisk. For eksempel inkluderer dbForge SQL Complete en funktion, der kan beregne aggregerede funktioner fra det færdige resultatsæt i SSMS-resultatgitteret.

Du kan måske dele dine yndlingstips relateret til SQL SUM-funktionen. Du er velkommen til at bruge kommentarsektionen.


  1. Få den første mandag i en måned i SQLite

  2. Automatisk stigning på delvis primær nøgle med Entity Framework Core

  3. Udvid EM Grid Control til nye noder

  4. TO_CHAR(tal) Funktion i Oracle