sql >> Databáze >  >> RDS >> Sqlserver

Jak používat SQL Server Funkce T-SQL SUM:5 případů použití

Funkce T-SQL SUM je jednou ze základních funkcí. Jeho účelem je vypočítat součet všech hodnot v zadaném sloupci – všimněte si, že platí pouze pro číselné sloupce.

Níže je uvedena syntaxe SQL SUM.

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

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • VŠECHNY je výchozí hodnota, jejíž předání není povinné. Umožňuje vrátit součet všech hodnot.
  • DISTINCT určuje, že musí vrátit pouze součet jedinečných hodnot, přičemž duplicitní hodnoty ignoruje.
  • Výraz je přesná nebo přibližná číselná kategorie datového typu, kromě bitu datový typ.
  • PŘED klauzule s partition_by_clause a order_by_clause je pro použití této funkce na konkrétním oddílu.
    • partition_by_clause rozděluje sadu výsledků vytvořenou klauzulí FROM do oddílů, na které je funkce aplikována
    • order_by_clause určuje logické pořadí, ve kterém se operace provádí.

Abych demonstroval použití funkce SQL SUM, vytvořil jsem tabulku s názvem Zaměstnanec . Má 5 sloupců – název , plat , nájemné , daň a povaha zaměstnání . V centru pozornosti budou následující případy použití:

  1. Základní nebo jednoduché použití funkce SUM
  2. Použití SUM s CASE výrazy
  3. Použití SUM s příkazem GROUP BY
  4. Použití SUM s klauzulí HAVING
  5. Použití SUM pro více nebo složitých aritmetických výrazů

Také se naučíme další případy použití, jako je použití SUM s klauzulí WHERE, klauzule ORDER BY nebo použití DISTINCT ve funkci SUM k získání součtu jedinečných hodnot. Ale nejdřív.

Případ použití 1:Jednoduchá funkce SQL SUM

Jak je uvedeno výše, mám tabulku s názvem Zaměstnanec s několika sloupci. Předpokládejme, že vaše společnost chce vědět, kolik mzdových nákladů vynakládá na všechny zaměstnance. Chcete-li získat hodnotu, stačí přidat plat všech zaměstnanců. SUM () vám usnadní život tím, že takové zprávy poskytne rychle.

Na plat použijeme funkci SUM () a výstupem budou celkové mzdové náklady vynaložené na všechny zaměstnance společnosti:

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

Pokud máte ve sloupci nějakou hodnotu NULL, tato funkce ji bude ignorovat a bude pokračovat s hodnotou dalšího řádku. Proto můžete mít hodnotu NULL pro každého zaměstnance, který opustil organizaci – společnost tomuto zdroji nic neplatí.

Výstup můžete vidět níže – ukazuje částku 885 000 USD vynaloženou na platy zaměstnanců:

Pokud existují duplicitní hodnoty v libovolném sloupci a chcete získat součet všech jedinečných hodnoty, můžete použít 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

Oba příkazy jsem provedl společně. Nejprve to byl ten z předchozího kroku se všemi hodnotami platu. Druhý byl pro jedinečné hodnoty – používal DISTINCT argument.

Podívejte se na níže uvedený snímek obrazovky – ukazuje výstupy obou prohlášení a jsou odlišné. Když ve výchozím nastavení používám funkci SUM pro všechny hodnoty, výstup je 885 000 $. Když používám DISTINCT argument pro získání součtu pouze jedinečných hodnot, výstup je 65 000 $.

V tomto sloupci tedy máme podobné hodnoty. v obchodních podmínkách to znamená, že máme jen málo zaměstnanců, kteří pobírají stejné částky, jako je jejich plat.

Tento příklad ukazuje použití DISTINCT argument k získání součtu všech jedinečných hodnot. V praxi nám to umožňuje vyhnout se duplicitním hodnotám z konečného výsledku.

Můžeme také použít WHERE klauzule v SQL SUM (). Řekněme, že vaše společnost chce získat celkové náklady, které utratí za zaměstnance, kteří dostávají více než 100 000 USD jako plat, a ne za stálého zaměstnance, aby pochopil rozložení nákladů. KDE doložka bude filtrovat výsledek a poskytuje celkové náklady podle obchodních požadavků.

V níže uvedeném T-SQL příkazu můžete vidět KDE doložka přidána k povaze zaměstnání sloupec. Tento sloupec vede záznamy o každém zaměstnanci, ať už jde o stálé nebo smluvní zaměstnance.

Všimněte si, že jsem použil operátor AND ke spojení obou požadavků:

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

Výstup ukazuje, že společnost utratí 240 000 USD za ty zaměstnance, kteří dostávají 100 000 USD nebo více, a nikoli za stálé zaměstnance.

Případ použití 2:Funkce SQL SUM s výrazy CASE

V našem scénáři chceme vědět, kolik zaměstnanců pracuje jako stálí spolu s jejich dalšími podrobnostmi. k získání tohoto výsledku můžeme použít CASE výraz v SUMA () funkce. Tento výsledek však můžete snadno získat jednoduchým zadáním KDE klauzule, někdy potřebujete CASE a SOUČET ve složitém požadavku na dotaz.

Podívejte se na níže uvedený příkaz T-SQL s CASE výraz uvnitř SUM () funkce:

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

Výstup z výše uvedených výkazů ukazuje 4 – společnost má dle evidence v Zaměstnanci pouze 4 stálé zaměstnance. tabulka.

Vezměme si další příklad CASE pomocí SUM () .

Při zkoumání případu užití 1 jsme ve výše uvedené sekci pod případem užití 1 našli celkové náklady vynaložené na smluvní zaměstnance, kteří dostávají 100 000 $ nebo více. Nyní chceme zjistit počet takových zaměstnanců. A CASE výraz se znovu objeví.

Můžeme použít CASE ve stejném příkazu T-SQL použitém dříve. Níže je příklad:

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

Výstup ukazuje, že 2 dodavatelé pracují a dostávají více než 100 000 $.

Můžete použít různé aspekty CASE výraz v SELECT spolu s SUM () funkce k naplnění vašich obchodních potřeb.

Případ použití 3:Funkce SQL SUM s GROUP BY

Předpokládejme, že naše společnost chce vědět, kolik peněz celkem utrácí za své stálé zaměstnance a kolik za smluvní zaměstnance. Tuto sadu výsledků můžeme získat pomocí SUM spolu s funkcí GROUP BY prohlášení.

Podívejte se na níže uvedený příkaz T-SQL. Použil jsem GROUP BY prohlášení o povaze zaměstnanosti a aplikoval funkci SUM na Plat sloupec, abyste získali celkový plat každého typu zaměstnance kategorizovaného podle povahy zaměstnání.

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

Sada výsledků poskytuje celkové peníze vynaložené na dodavatele a stálé zaměstnance. Pokud sečtete obě tato čísla, jejich součet bude celkovými penězi vynaloženými na plat jejich zaměstnanců (porovnejte toto číslo s prvním snímkem obrazovky tohoto článku).

Případ POUŽITÍ 4:Funkce SQL SUM s příkazem HAVING

Nyní prozkoumáme použití funkce SUM společně s příkazy HAVING a GROUP BY. Náš příklad zobrazí seznam zaměstnanců, kteří dostávají více než 150 000 $ ročně. Můžeme to získat jednoduše pomocí příkazu SELECT s klauzulí WHERE, ale ukážu vám, jak dosáhnout stejného výsledku pomocí HAVING, GROUP BY a SUM.

Existují 2 T-SQL skripty. Výstup obou příkazů je stejný, ale první skript používá jednoduchý příkaz SELECT, zatímco druhý kód používá funkci SUM spolu s klauzulemi GROUP BY a HAVING.

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

Podívejte se na výstupy obou skriptů:

Existuje další aspekt použití těchto prohlášení. Pro získání nájemného jsem předal aritmetické výrazy ve funkci SUM a daň výdaje zaměstnanců. Poté jsem použil GROUP BY a MÍT výpisy o platu sloupec. Jednoduše řečeno, chtěl jsem znát celkové nájemné a daňové výdaje vynaložené zaměstnanci s platem 150 000 $ nebo více.

Také jsem použil dva dotazy. První uvádí podrobnosti o všech zaměstnancích, kteří dostávají 150 000 $ nebo více. Tento výstup je načten pouze pro ověření a ověření. Druhý používá SUM funkce na dvou sloupcích (nájemné a daň ) jako jejich celkové výdaje. Pak platí GROUP BY a MÍT klauzule:

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

Pojďme analyzovat výstup. První dotaz zobrazí všechny podrobnosti o zaměstnancích s platy 150 000 $ nebo více. Nyní se podívejte na výsledek druhého dotazu. Zde jsme získali zaměstnance a jejich výdaje na základě jejich meze platů, která je 150 000 $ nebo více. Tímto způsobem jsme ověřili, že náš dotaz s klauzulemi SUM, GROUP BY a HAVING vrací správné výsledky.

Případ použití 5:Funkce SQL SUM s více aritmetickými výrazy

Funkce SUM nabízí velkou flexibilitu, pokud jde o aritmetické výrazy. Můžeme použít více aritmetických výrazů, jako je v případě potřeby sčítání nebo odečítání mezi více hodnotami sloupců. Podívejme se na příklad.

Chceme vytáhnout zprávu o celkových úsporách našich zaměstnanců. Mohou zde být různé sloupce výdajů nebo příspěvků, např. příspěvek na nájem domu, cestovní náhrady, stravné atd. Naše tabulka Zaměstnanec má dva sloupce týkající se výdajů zaměstnanců – nájem placené za ubytování a daně placené vládě. Můžete pochopit tento koncept a aplikovat jej na více sloupců podobným způsobem.

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

První dotaz zobrazí všechna data z tabulky Zaměstnanec . Tato data použijeme jako referenci pro ověření našeho skutečného výstupu vráceného druhým dotazem o celkových úsporách pro každého zaměstnance.

Získali jsme to přidáním všech výdajů a následným odečtením všech výdajů od platu zaměstnance, jak je uvedeno v SUMA příkaz funkce. Můžete to ověřit ručním výpočtem těchto dat z první sady výsledků pro kteréhokoli zaměstnance, abyste je mohli ověřit.

Závěr

Prozkoumali jsme několik případů použití funkce SQL SUM s jinými klauzulemi. Mimochodem, moderní digitální nástroje pro specialisty na SQL Server mohou tyto úkoly výrazně zjednodušit. Například dbForge SQL Complete obsahuje funkci, která dokáže vypočítat agregační funkce z připravené sady výsledků v mřížce výsledků SSMS.

Můžete sdílet své oblíbené tipy související s funkcí SQL SUM. Můžete použít sekci Komentáře.


  1. Export výsledků dotazu Mysql do excelu?

  2. Nemáte rádi databázové spouštěče? Jen nevíte, jak s nimi pracovat!

  3. Vícenásobné databázové připojení v Rails

  4. Srovnávání spravovaných cloudových řešení PostgreSQL – Část první:Amazon Aurora