sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder SQL Server T-SQL-funktion SUMMA:5 användningsfall

T-SQL SUM-funktionen är en av de grundläggande funktionerna. Dess syfte är att beräkna summan av alla värden i den angivna kolumnen – observera att den endast gäller numeriska kolumner.

Nedan finns syntaxen för SQL SUM.

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

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • ALLA är ett standardvärde, inte obligatoriskt att godkänna. Det gör det möjligt att returnera summan av alla värden.
  • DISTINKT anger att den endast måste returnera summan av unika värden, ignorera dubbletter av värden.
  • Uttryck är den exakta eller ungefärliga numeriska datatypkategorin, förutom biten data typ.
  • ÖVER -sats med partition_by_clause och order_efter_klausul är för att använda den här funktionen på en specifik partition.
    • partition_by_clause delar upp resultatuppsättningen som produceras av FROM-satsen i partitioner som funktionen tillämpas på
    • order_efter_klausul bestämmer den logiska ordningen i vilken operationen utförs.

För att demonstrera användningen av SQL SUM-funktionen har jag skapat en tabell med namnet Employee . Den har 5 kolumner – namn , lön , hyra , skatt , och anställningskaraktär . Följande användningsfall kommer att vara i fokus:

  1. Grundläggande eller enkel användning av SUM-funktionen
  2. Använda SUM med CASE-uttryck
  3. Använda SUM med GROUP BY-sats
  4. Använda SUM med HAVING-sats
  5. Tillämpa SUM för flera eller komplexa aritmetiska uttryck

Vi kommer också att lära oss andra användningsfall som att använda SUM med WHERE-sats, ORDER BY-sats eller att använda DISTINCT i SUM-funktionen för att få summan av unika värden. Men först till kvarn.

Användningsfall 1:Enkel SQL SUM-funktion

Som nämnts ovan har jag en tabell som heter Anställd med få kolumner. Antag att ditt företag vill veta hur mycket lönekostnad de lägger på alla anställda. För att få värdet behöver du bara lägga till lönen för alla anställda. SUM () kommer att göra ditt liv enkelt, och tillhandahåller sådana rapporter snabbt.

Vi kommer att använda funktionen SUM () på lönen kolumnen, och resultatet kommer att vara den totala lönekostnaden som spenderas på alla företagets anställda:

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

Om du har något NULL-värde i kolumnen kommer den här funktionen att ignorera det och fortsätta med nästa radvärde. Således kan du ha NULL för alla anställda som lämnat organisationen – företaget betalar ingenting till den resursen.

Du kan se resultatet nedan – det visar beloppet på 885 000 USD som spenderats på anställdas löner:

Om det finns dubbletter värden i valfri kolumn och du vill få summan av alla unika värden kan du använda 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

Jag har utfört båda uttalandena tillsammans. Först var det den från föregående steg med alla lönevärden. Den andra gällde unika värden – den använde DISTINCT argument.

Ta en titt på skärmdumpen nedan - den visar utdata från båda påståendena, och de är olika. När jag använder SUM-funktionen för alla värden som standard är utdata $885000. När jag använder DISTINCT argument för att bara få summan av unika värden, utdata är $65000.

Därför har vi liknande värden i den här kolumnen. i affärsmässiga termer betyder det att vi har få anställda som får samma belopp som deras lön.

Det här exemplet visar användningen av DISTINCT argument för att få summan av alla unika värden. I praktiken låter det oss undvika dubbletter av värden från slutresultatet.

Vi kan också använda VAR sats i SQL SUM (). Låt oss säga att ditt företag vill få den totala kostnaden för anställda som får mer än $100 000 i lön, och inte en fast anställd för att förstå kostnadsfördelningen. VAR klausulen filtrerar resultatet och ger den totala kostnaden enligt affärskrav.

I T-SQL-satsen nedan kan du se WHERE klausul läggs till i Anställningsnatur kolumn. Den här kolumnen sparar varje anställd, oavsett om de är fast anställda eller kontraktsanställda.

Observera att jag har använt AND-operatorn för att klubba båda kraven:

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

Resultatet visar att företaget spenderar $240000 på de anställda som får $100000 eller mer, och inte fast anställda.

Användningsfall 2:SQL SUM-funktion med CASE-uttryck

I vårt scenario vill vi veta hur många anställda som arbetar som fast anställda tillsammans med sina övriga uppgifter. för att få det här resultatet kan vi använda CASE uttryck i SUM () fungera. Även om du enkelt kan få det här resultatet genom att helt enkelt sätta VAR klausul, ibland behöver du CASE och SUMMA i ett komplext frågekrav.

Ta en titt på nedanstående T-SQL-sats med CASE uttryck 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]

Utdata från ovanstående uttalanden visar 4 – företaget har endast 4 fast anställda enligt deras register i Anställd bord.

Låt oss ta ett annat exempel på CASE med SUM () .

När vi undersökte användningsfall 1 hittade vi de totala kostnaderna för kontraktsanställda som får 100 000 USD eller mer i avsnittet ovan under användningsfall 1. Nu vill vi hitta antalet sådana anställda. Och FALLET uttrycket kommer in i bilden igen.

Vi kan använda CASE i samma T-SQL-sats som användes tidigare. Nedan är exemplet:

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

Resultatet visar oss 2 entreprenörer som arbetar och får mer än $100 000.

Du kan använda olika aspekter av CASE uttryck i SELECT uttalande tillsammans med SUM () funktion för att uppfylla dina affärsbehov.

Användningsfall 3:SQL SUM-funktion med GROUP BY

Låt oss anta att vårt företag vill veta hur mycket pengar det totalt spenderar på sina fast anställda och hur mycket pengar det spenderar på kontraktsanställda. Vi kan få det här resultatet med SUMMA fungerar tillsammans med GROUP BY uttalande.

Titta på nedanstående T-SQL-uttalande. Jag har använt GROUP BY uttalande om sysselsättningsnaturen kolumnen och använde SUM-funktionen på Lön kolumnen för att få den totala lönen för varje typ av anställd kategoriserad under deras anställningskaraktär.

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

Resultatuppsättningen ger de totala pengarna som spenderas på entreprenörer och fast anställda. Om du lägger till båda dessa siffror kommer deras summa att vara den totala summan som spenderas på deras anställdas lön (jämför detta nummer med den första skärmdumpen i denna artikel).

USE Fall 4:SQL SUM-funktion med HAVING-sats

Nu ska vi utforska användningen av SUM-funktionen med HAVING- och GROUP BY-satser tillsammans. Vårt exempel visar listan över anställda som får mer än 150 000 USD per år. Vi kan få det genom att helt enkelt använda SELECT-satsen med WHERE-satsen, men jag kommer att visa dig hur du får samma resultat med HAVING, GROUP BY och SUM.

Det finns 2 T-SQL-skript. Utdata från båda satserna är samma, men det första skriptet använder en enkel SELECT-sats, medan den andra koden använder SUM-funktionen tillsammans med GROUP BY- och HAVING-satser.

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 utdata från båda skripten:

Det finns en annan aspekt av att använda dessa uttalanden. Jag har klarat aritmetiska uttryck i SUM-funktionen för att få hyran och skatt anställdas utgifter. Sedan använde jag GROUP BY och HA uttalanden om lönen kolumn. Med enkla ord ville jag veta de totala hyres- och skattekostnader som spenderas av anställda med en lön på $150 000 eller mer.

Jag använde också två frågor. Den första listar uppgifterna om alla anställda som får $150 000 eller mer. Denna utdata hämtas bara för validering och verifiering. Den andra använder SUMMA funktion på två kolumner (hyra och skatt ) som deras totala utgifter. Då gäller GROUP BY och HA 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

Låt oss analysera resultatet. Den första frågan visar alla detaljer om anställda med löner på $150 000 eller mer. Titta nu på det andra frågeresultatet. Här har vi hämtat de anställda och deras utgifter baserat på deras löneavdrag som är $150 000 eller mer. På så sätt har vi verifierat att vår fråga med satserna SUM, GROUP BY och HAVING ger korrekta resultat.

Användningsfall 5:SQL SUM-funktion med flera aritmetiska uttryck

SUM-funktionen erbjuder stor flexibilitet när det kommer till aritmetiska uttryck. Vi kan använda flera aritmetiska uttryck, som att lägga till eller subtrahera mellan flera kolumnvärden när det behövs. Låt oss hänvisa till ett exempel.

Vi vill dra en rapport om våra anställdas totala besparingar. Det kan finnas olika kolumner med utgifter eller traktamenten, såsom hushyresersättning, reseersättning, måltidsersättning etc. Vår tabell Anställd har två kolumner relaterade till de anställdas utgifter – hyran som betalas för boende och de skatter som betalas till staten. Du kan förstå konceptet och tillämpa det på fler kolumner på liknande sätt.

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örsta frågan visar all data från tabellen Anställd . Vi kommer att använda dessa data som en referens för att verifiera vår faktiska produktion som returneras av den andra frågan om de totala besparingarna för varje anställd.

Vi har fått detta genom att lägga till alla utgifter och sedan dra av alla utgifter från den anställdes lön enligt SUMMA funktionsförklaring. Du kan verifiera det genom att manuellt beräkna dessa data från den första resultatuppsättningen för en anställd för att få den validerad.

Slutsats

Vi har utforskat flera användningsfall av SQL SUM-funktion med andra satser. Förresten, moderna digitala verktyg för SQL Server-specialister kan förenkla dessa uppgifter drastiskt. Till exempel inkluderar dbForge SQL Complete en funktion som kan beräkna aggregerade funktioner från den färdiga resultatuppsättningen i SSMS-resultatrutnätet.

Du kanske delar med dig av dina favorittips relaterade till SQL SUM-funktionen. Du är välkommen att använda kommentarsektionen.


  1. MySQL Förberedda uttalanden med en variabel lista med variabel storlek

  2. Psycopg2, Postgresql, Python:Snabbaste sättet att bulkinfoga

  3. Cloud9 postgres

  4. Ändra en befintlig kolumn till en beräknad kolumn i SQL Server (T-SQL-exempel)