Funkcja T-SQL SUM jest jedną z podstawowych funkcji. Jego celem jest obliczenie sumy wszystkich wartości w określonej kolumnie – zauważ, że dotyczy to tylko kolumn liczbowych.
Poniżej znajduje się składnia SQL SUM.
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
- WSZYSTKIE jest wartością domyślną, której przekazywanie nie jest obowiązkowe. Pozwala na zwrócenie sumy wszystkich wartości.
- ODRÓŻNE określa, że musi zwrócić sumę tylko unikalnych wartości, ignorując zduplikowane wartości.
- Wyrażenie to dokładna lub przybliżona kategoria liczbowego typu danych, z wyjątkiem bitu typ danych.
- KONIEC Klauzula z partition_by_clause i order_by_clause służy do używania tej funkcji na określonej partycji.
- partition_by_clause dzieli zbiór wyników utworzony przez klauzulę FROM na partycje, do których stosowana jest funkcja
- order_by_clause określa logiczną kolejność wykonywania operacji.
Aby zademonstrować użycie funkcji SQL SUM, stworzyłem tabelę o nazwie Pracownik . Ma 5 kolumn – nazwa , wynagrodzenie , wynajem , podatek oraz charakter zatrudnienia . W centrum uwagi znajdą się następujące przypadki użycia:
- Podstawowe lub proste użycie funkcji SUMA
- Używanie SUM z wyrażeniami CASE
- Używanie SUM z instrukcją GROUP BY
- Używanie SUM z klauzulą HAVING
- Stosowanie SUMA dla wielu lub złożonych wyrażeń arytmetycznych
Nauczymy się również innych przypadków użycia, takich jak użycie SUM z klauzulą WHERE, klauzulą ORDER BY lub użycie DISTINCT w funkcji SUM, aby uzyskać sumę unikalnych wartości. Ale najpierw najważniejsze.
Przypadek użycia 1:prosta funkcja sumy SQL
Jak wspomniano powyżej, mam tabelę o nazwie Pracownik z kilkoma kolumnami. Załóżmy, że Twoja firma chce wiedzieć, ile kosztuje wszystkich pracowników. Aby uzyskać wartość, wystarczy dodać pensję wszystkich pracowników. SUM () ułatwi Ci życie, szybko dostarczając takie raporty.
Użyjemy funkcji SUMA () na wynagrodzeniu kolumna, a wynik będzie całkowitym kosztem wynagrodzeń poniesionym na wszystkich pracowników firmy:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
Jeśli w kolumnie znajduje się jakakolwiek wartość NULL, ta funkcja zignoruje ją i przejdzie do następnej wartości wiersza. W związku z tym możesz mieć NULL dla każdego pracownika, który opuścił organizację – firma nie płaci nic do tego zasobu.
Możesz zobaczyć wynik poniżej – pokazuje kwotę 885 000 $ wydaną na pensje pracowników:
Jeśli są duplikaty wartości w dowolnej kolumnie i chcesz uzyskać sumę wszystkich unikalnych wartości, możesz użyć 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 oświadczenia wykonałem razem. Po pierwsze, był to ten z poprzedniego kroku ze wszystkimi wartościami wynagrodzenia. Drugi dotyczył unikalnych wartości – używał DISTINCT argument.
Spójrz na poniższy zrzut ekranu – pokazuje on wyniki obu stwierdzeń i są one różne. Kiedy domyślnie używam funkcji SUMA dla wszystkich wartości, wynik wynosi 885000 USD. Kiedy używam DISTINCT argument, aby uzyskać sumę tylko unikalnych wartości, wynik wynosi 65000 USD.
W tej kolumnie mamy więc podobne wartości. w sensie biznesowym oznacza to, że niewielu pracowników otrzymuje takie same kwoty, jak ich wynagrodzenie.
Ten przykład pokazuje użycie DISTINCT argument, aby uzyskać sumę wszystkich unikalnych wartości. W praktyce pozwala nam to uniknąć zduplikowanych wartości w wyniku końcowym.
Możemy również użyć GDZIE klauzula w SQL SUMA (). Załóżmy, że Twoja firma chce uzyskać łączny koszt, jaki wydaje na pracowników, którzy otrzymują ponad 100 000 USD jako wynagrodzenie, a nie stałego pracownika, aby zrozumieć rozkład kosztów. GDZIE klauzula przefiltruje wynik i poda całkowity koszt zgodnie z wymaganiami biznesowymi.
W poniższym oświadczeniu T-SQL możesz zobaczyć GDZIE dodana klauzula Charakter zatrudnienia kolumna. Ta kolumna zawiera rejestr każdego pracownika, niezależnie od tego, czy jest to pracownik stały, czy kontraktowy.
Zwróć uwagę, że użyłem operatora AND, aby połączyć oba wymagania:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO
Dane wyjściowe pokazują, że firma wydaje 240000 USD na tych pracowników, którzy otrzymują 100000 USD lub więcej, a nie na stałych pracowników.
Przypadek użycia 2:Funkcja SQL SUM z wyrażeniami CASE
W naszym scenariuszu chcemy wiedzieć, ilu pracowników pracuje na stałe wraz z innymi szczegółami. aby uzyskać ten wynik, możemy użyć CASE wyrażenie w SUMA () funkcjonować. Chociaż możesz łatwo uzyskać ten wynik, po prostu umieszczając GDZIE klauzula, czasami potrzebujesz CASE i SUMA w złożonym wymaganiu zapytania.
Spójrz na poniższe oświadczenie T-SQL z CASE wyrażenie wewnątrz SUM () funkcja:
--USE SUM function with CASE expression
SELECT
SUM(
CASE
WHEN [Employment Nature] = ‘Permanent’ THEN 1
ELSE 0
END) As [Total Employees],
FROM [dbo].[Employee]
Wynik powyższych stwierdzeń pokazuje 4 – firma ma tylko 4 stałych pracowników zgodnie z ich danymi w Pracownik tabela.
Weźmy inny przykład CASE z SUMA () .
Podczas badania przypadku użycia 1 znaleźliśmy całkowite koszty poniesione na pracowników kontraktowych, którzy otrzymują 100000 USD lub więcej w powyższej sekcji w przypadku użycia 1. Teraz chcemy znaleźć liczbę takich pracowników. I PRZYPADEK wyrażenie ponownie pojawi się na obrazie.
Możemy użyć CASE w tej samej instrukcji T-SQL, która była używana wcześniej. Poniżej znajduje się przykład:
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
Dane wyjściowe pokazują nam, że 2 wykonawców pracuje i otrzymuje ponad 100000 USD.
Możesz użyć różnych aspektów PRZYPADKU wyrażenie w SELECT oświadczenie wraz z SUM () funkcja spełniająca Twoje potrzeby biznesowe.
Przypadek użycia 3:Funkcja SQL SUM z GROUP BY
Załóżmy, że nasza firma chce wiedzieć, ile w sumie wydaje na swoich stałych pracowników, a ile na pracowników kontraktowych. Możemy uzyskać ten zestaw wyników za pomocą SUMA funkcja wraz z GRUPA WEDŁUG oświadczenie.
Spójrz na poniższą instrukcję T-SQL. Użyłem GROUP BY oświadczenie na temat charakteru zatrudnienia i zastosował funkcję SUMA na Wynagrodzeniu kolumna, aby uzyskać łączną pensję każdego typu pracownika sklasyfikowanego zgodnie z ich charakterem zatrudnienia.
USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]
Zestaw wyników zawiera sumę pieniędzy wydanych na kontrahentów i stałych pracowników. Jeśli dodasz obie te liczby, ich suma będzie sumą pieniędzy wydanych na wynagrodzenie ich pracowników (porównaj tę liczbę z pierwszym zrzutem ekranu tego artykułu).
Przypadek użycia 4:Funkcja SQL SUM z instrukcją HAVING
Teraz zbadamy użycie funkcji SUMA razem z instrukcjami HAVING i GROUP BY. Nasz przykład wyświetli listę pracowników, którzy otrzymują więcej niż 150000 USD rocznie. Możemy to uzyskać, po prostu używając instrukcji SELECT z klauzulą WHERE, ale pokażę ci, jak uzyskać ten sam wynik za pomocą HAVING, GROUP BY i SUM.
Istnieją 2 skrypty T-SQL. Dane wyjściowe obu instrukcji są takie same, ale pierwszy skrypt używa prostej instrukcji SELECT, podczas gdy drugi kod używa funkcji SUM wraz z klauzulami GROUP BY i 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
Zobacz wyniki obu skryptów:
Jest jeszcze jeden aspekt używania tych stwierdzeń. Przekazałem wyrażenia arytmetyczne w funkcji SUMA, aby uzyskać czynsz i podatek wydatki pracowników. Następnie zastosowałem GROUP BY i POSIADAJĄCY oświadczenia dotyczące wynagrodzenia kolumna. Krótko mówiąc, chciałem poznać całkowite wydatki na czynsz i podatki wydawane przez pracowników z pensją w wysokości 150000 USD lub więcej.
Użyłem również dwóch zapytań. Pierwsza zawiera szczegółowe informacje o wszystkich pracownikach, którzy otrzymują 150000 USD lub więcej. Te dane wyjściowe są pobierane tylko w celu walidacji i weryfikacji. Drugi używa SUMA funkcja na dwóch kolumnach (wynajem i podatek ) jako ich całkowite wydatki. Następnie stosuje się GROUP BY i POSIADAJĄCY 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
Przeanalizujmy wyjście. Pierwsze zapytanie wyświetla wszystkie szczegóły pracowników z zarobkami w wysokości 150000 USD lub więcej. Teraz spójrz na drugi wynik zapytania. Tutaj pobraliśmy pracowników i ich wydatki na podstawie ich odcięcia wynagrodzeń, które wynosi 150000 USD lub więcej. W ten sposób sprawdziliśmy, że nasze zapytanie z klauzulami SUM, GROUP BY i HAVING zwraca poprawne wyniki.
Przypadek użycia 5:Funkcja SQL SUM z wieloma wyrażeniami arytmetycznymi
Funkcja SUMA zapewnia dużą elastyczność, jeśli chodzi o wyrażenia arytmetyczne. W razie potrzeby możemy użyć wielu wyrażeń arytmetycznych, takich jak dodawanie lub odejmowanie między wartościami wielu kolumn. Spójrzmy na przykład.
Chcemy wyciągnąć raport o całkowitych oszczędnościach naszych pracowników. Mogą istnieć różne kolumny wydatków lub dodatków, takie jak dodatek za czynsz domu, dodatki na podróże, dieta na posiłki itp. Nasza tabela Pracownik ma dwie kolumny związane z wydatkami pracowników – czynsz płacony za zakwaterowanie oraz podatki płacone rządowi. Możesz zrozumieć tę koncepcję i zastosować ją do większej liczby kolumn w podobny sposób.
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
Pierwsze zapytanie wyświetla wszystkie dane z tabeli Pracownik . Wykorzystamy te dane jako odniesienie do zweryfikowania naszych rzeczywistych wyników zwróconych przez drugie zapytanie o łączne oszczędności dla każdego pracownika.
Uzyskaliśmy to, dodając wszystkie wydatki, a następnie odejmując wszystkie wydatki od wynagrodzenia pracownika, jak podano w SUMA instrukcja funkcji. Możesz to zweryfikować, ręcznie obliczając te dane z pierwszego zestawu wyników dla dowolnego pracownika, aby je zweryfikować.
Wniosek
Zbadaliśmy wiele przypadków użycia funkcji SQL SUM z innymi klauzulami. Nawiasem mówiąc, nowoczesne narzędzia cyfrowe dla specjalistów SQL Server mogą drastycznie uprościć te zadania. Na przykład dbForge SQL Complete zawiera funkcję, która może obliczać funkcje agregujące z gotowego zestawu wyników w siatce wyników SSMS.
Możesz podzielić się swoimi ulubionymi wskazówkami dotyczącymi funkcji SUMA SQL. Zapraszamy do korzystania z sekcji Komentarze.