Die T-SQL SUM-Funktion ist eine der grundlegenden Funktionen. Sein Zweck besteht darin, die Summe aller Werte in der angegebenen Spalte zu berechnen – beachten Sie, dass dies nur für numerische Spalten gilt.
Unten ist die Syntax von SQL SUM.
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
- ALLE ist ein Standardwert, der nicht zwingend übergeben werden muss. Es ermöglicht die Rückgabe der Summe aller Werte.
- DISTINCT gibt an, dass nur die Summe eindeutiger Werte zurückgegeben werden muss und doppelte Werte ignoriert werden.
- Ausdruck ist die exakte oder ungefähre numerische Datentypkategorie, mit Ausnahme von bit Datentyp.
- ÜBER -Klausel mit partition_by_clause und order_by_clause dient zur Verwendung dieser Funktion auf einer bestimmten Partition.
- partition_by_clause teilt die von der FROM-Klausel erzeugte Ergebnismenge in Partitionen auf, auf die die Funktion angewendet wird
- order_by_clause bestimmt die logische Reihenfolge, in der die Operation ausgeführt wird.
Um die Verwendung der SQL SUM-Funktion zu demonstrieren, habe ich eine Tabelle mit dem Namen Employee erstellt . Es hat 5 Spalten – name , Gehalt , mieten , Steuer , und Beschäftigungsnatur . Dabei stehen folgende Anwendungsfälle im Fokus:
- Grundlegende oder einfache Verwendung der SUM-Funktion
- SUM mit CASE-Ausdrücken verwenden
- SUM mit GROUP BY-Anweisung verwenden
- SUM mit HAVING-Klausel verwenden
- Anwenden von SUM auf mehrere oder komplexe arithmetische Ausdrücke
Außerdem lernen wir andere Anwendungsfälle kennen, z. B. die Verwendung von SUM mit der WHERE-Klausel, der ORDER BY-Klausel oder die Verwendung von DISTINCT in der SUM-Funktion, um die Summe eindeutiger Werte zu erhalten. Aber der Reihe nach.
Anwendungsfall 1:Einfache SQL-SUMME-Funktion
Wie oben erwähnt, habe ich eine Tabelle mit dem Namen Employee mit wenigen Spalten. Angenommen, Ihr Unternehmen möchte wissen, wie viel Gehalt es für alle Mitarbeiter ausgibt. Um den Wert zu erhalten, müssen Sie nur das Gehalt aller Mitarbeiter addieren. SUM () macht Ihnen das Leben leichter und liefert solche Berichte schnell.
Wir verwenden die Funktion SUM () für das Gehalt Spalte, und das Ergebnis sind die gesamten Gehaltskosten, die für alle Mitarbeiter des Unternehmens ausgegeben werden:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
Wenn Sie einen NULL-Wert in der Spalte haben, wird diese Funktion ihn ignorieren und mit dem nächsten Zeilenwert fortfahren. Daher haben Sie möglicherweise NULL für jeden Mitarbeiter, der die Organisation verlassen hat – das Unternehmen zahlt nichts an diese Ressource.
Sie können die Ausgabe unten sehen – sie zeigt den Betrag von 885.000 $, der für die Gehälter der Mitarbeiter ausgegeben wurde:
Wenn es Duplikate gibt Werte in einer beliebigen Spalte, und Sie möchten die Summe aller eindeutigen Werte erhalten Werten können Sie DISTINCT verwenden 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
Ich habe beide Anweisungen zusammen ausgeführt. Zuerst war es die aus dem vorherigen Schritt mit allen Gehaltswerten. Die zweite war für eindeutige Werte – sie verwendete DISTINCT Argument.
Schauen Sie sich den folgenden Screenshot an – er zeigt die Ausgaben beider Anweisungen, und sie sind unterschiedlich. Wenn ich die SUM-Funktion standardmäßig für alle Werte verwende, beträgt die Ausgabe 885000 $. Wenn ich die DISTINCT verwende -Argument, um nur die Summe der eindeutigen Werte zu erhalten, beträgt die Ausgabe 65.000 $.
Daher haben wir ähnliche Werte in dieser Spalte. In geschäftlicher Hinsicht bedeutet dies, dass wir nur wenige Mitarbeiter haben, die die gleichen Beträge wie ihr Gehalt erhalten.
Dieses Beispiel demonstriert die Verwendung von DISTINCT -Argument, um die Summe aller eindeutigen Werte zu erhalten. In der Praxis können wir so doppelte Werte aus dem Endergebnis vermeiden.
Wir können auch das WHERE verwenden -Klausel in SQL SUM (). Nehmen wir an, Ihr Unternehmen möchte die Gesamtkosten ermitteln, die es für Mitarbeiter ausgibt, die mehr als 100.000 USD als Gehalt erhalten, und nicht für einen festangestellten Mitarbeiter, um die Kostenverteilung zu verstehen. Das WO -Klausel filtert das Ergebnis und stellt die Gesamtkosten gemäß den Geschäftsanforderungen bereit.
In der folgenden T-SQL-Anweisung können Sie das WHERE sehen Klausel zur Beschäftigungsnatur hinzugefügt Säule. In dieser Spalte werden alle Mitarbeiter erfasst, unabhängig davon, ob es sich um Festangestellte oder Vertragsangestellte handelt.
Beachten Sie, dass ich den UND-Operator verwendet habe, um beide Anforderungen zu verbinden:
USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO
Die Ausgabe zeigt, dass das Unternehmen 240.000 $ für Mitarbeiter ausgibt, die 100.000 $ oder mehr erhalten, und nicht für festangestellte Mitarbeiter.
Anwendungsfall 2:SQL-SUM-Funktion mit CASE-Ausdrücken
In unserem Szenario möchten wir wissen, wie viele Mitarbeiter zusammen mit ihren anderen Details fest angestellt sind. Um dieses Ergebnis zu erhalten, können wir den CASE verwenden Ausdruck in SUM () Funktion. Sie können dieses Ergebnis jedoch leicht erhalten, indem Sie einfach WHERE eingeben Klausel, manchmal brauchen Sie CASE und SUMME in einer komplexen Abfrageanforderung.
Sehen Sie sich die folgende T-SQL-Anweisung mit dem CASE an Ausdruck innerhalb von 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]
Die Ausgabe der obigen Aussagen zeigt 4 – das Unternehmen hat nur 4 festangestellte Mitarbeiter gemäß ihren Aufzeichnungen unter Employee Tabelle.
Nehmen wir ein weiteres Beispiel für CASE mit SUMME () .
Bei der Untersuchung von Anwendungsfall 1 haben wir im obigen Abschnitt unter Anwendungsfall 1 die Gesamtkosten für Vertragsangestellte gefunden, die 100.000 USD oder mehr erhalten. Jetzt möchten wir die Anzahl dieser Mitarbeiter ermitteln. Und der FALL Ausdruck wird wieder ins Bild kommen.
Wir können CASE verwenden in derselben T-SQL-Anweisung, die zuvor verwendet wurde. Unten ist das Beispiel:
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
Die Ausgabe zeigt uns 2 Auftragnehmer, die arbeiten und mehr als 100.000 $ erhalten.
Sie können verschiedene Aspekte des CASE verwenden Ausdruck im SELECT -Anweisung zusammen mit der SUM () Funktion, um Ihre geschäftlichen Anforderungen zu erfüllen.
Anwendungsfall 3:SQL-SUM-Funktion mit GROUP BY
Nehmen wir an, unser Unternehmen möchte wissen, wie viel Geld es insgesamt für seine Festangestellten ausgibt und wie viel Geld es für Vertragsangestellte ausgibt. Wir können diese Ergebnismenge mit SUM erhalten Funktion zusammen mit GROUP BY Aussage.
Sehen Sie sich die folgende T-SQL-Anweisung an. Ich habe die GRUPPE NACH verwendet Erklärung zur Beschäftigungsnatur Spalte und wendete die SUM-Funktion auf das Gehalt an Spalte, um das Gesamtgehalt jedes Mitarbeitertyps zu erhalten, der nach seiner Beschäftigungsart kategorisiert ist.
USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]
Die Ergebnismenge enthält die Gesamtausgaben für Auftragnehmer und fest angestellte Mitarbeiter. Wenn Sie diese beiden Zahlen addieren, ist ihre Summe der Gesamtbetrag, der für das Gehalt ihrer Mitarbeiter ausgegeben wird (vergleichen Sie diese Zahl mit dem ersten Screenshot dieses Artikels).
USE-Fall 4:SQL-SUM-Funktion mit HAVING-Anweisung
Jetzt untersuchen wir die gemeinsame Verwendung der SUM-Funktion mit HAVING- und GROUP BY-Anweisungen. In unserem Beispiel wird die Liste der Mitarbeiter angezeigt, die mehr als 150.000 USD pro Jahr erhalten. Wir können es bekommen, indem wir einfach die SELECT-Anweisung mit der WHERE-Klausel verwenden, aber ich werde Ihnen zeigen, wie Sie dasselbe Ergebnis mit HAVING, GROUP BY und SUM erhalten.
Es gibt 2 T-SQL-Skripte. Die Ausgabe beider Anweisungen ist dieselbe, aber das erste Skript verwendet eine einfache SELECT-Anweisung, während der zweite Code die SUM-Funktion zusammen mit GROUP BY- und HAVING-Klauseln verwendet.
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
Sehen Sie sich die Ausgaben beider Skripte an:
Es gibt noch einen weiteren Aspekt bei der Verwendung dieser Anweisungen. Ich habe arithmetische Ausdrücke in der SUM-Funktion übergeben, um die Miete zu erhalten und Steuer Ausgaben der Mitarbeiter. Dann habe ich GROUP BY angewendet und HABEN Aussagen zum Gehalt Säule. Mit einfachen Worten, ich wollte die gesamten Miet- und Steuerausgaben von Mitarbeitern mit einem Gehalt von 150.000 $ oder mehr wissen.
Ich habe auch zwei Abfragen verwendet. Die erste listet die Details aller Mitarbeiter auf, die 150.000 USD oder mehr erhalten. Diese Ausgabe wird nur zur Validierung und Verifizierung abgerufen. Der zweite verwendet die SUMME Funktion auf zwei Spalten (miete und Steuer ) als ihre Gesamtausgaben. Dann gilt GROUP BY und HABEN Klauseln:
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
Lassen Sie uns die Ausgabe analysieren. Die erste Abfrage zeigt alle Details von Mitarbeitern mit Gehältern von 150.000 USD oder mehr an. Sehen Sie sich nun das zweite Abfrageergebnis an. Hier haben wir die Mitarbeiter und ihre Ausgaben basierend auf ihrer Gehaltsgrenze von 150.000 USD oder mehr abgerufen. Auf diese Weise haben wir verifiziert, dass unsere Abfrage mit den Klauseln SUM, GROUP BY und HAVING korrekte Ergebnisse liefert.
Anwendungsfall 5:SQL-SUM-Funktion mit mehreren arithmetischen Ausdrücken
Die SUM-Funktion bietet große Flexibilität, wenn es um arithmetische Ausdrücke geht. Wir können mehrere arithmetische Ausdrücke verwenden, z. B. bei Bedarf zwischen mehreren Spaltenwerten addieren oder subtrahieren. Sehen wir uns ein Beispiel an.
Wir wollen einen Bericht über die Gesamteinsparungen unserer Mitarbeiter ziehen. Es kann verschiedene Spalten von Ausgaben oder Zulagen geben, wie z. B. Wohnungsmietenzuschuss, Fahrtkostenzuschuss, Verpflegungszuschuss etc. Unsere Tabelle Mitarbeiter hat zwei Spalten, die sich auf die Ausgaben der Mitarbeiter beziehen – die für die Unterkunft gezahlte Miete und die an die Regierung gezahlten Steuern. Sie können das Konzept verstehen und auf ähnliche Weise auf weitere Spalten anwenden.
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
Die erste Abfrage zeigt alle Daten aus der Tabelle Mitarbeiter an . Wir verwenden diese Daten als Referenz, um unsere tatsächliche Leistung zu überprüfen, die von der zweiten Abfrage zu den Gesamteinsparungen für jeden Mitarbeiter zurückgegeben wird.
Wir haben dies erhalten, indem wir alle Ausgaben addieren und dann alle Ausgaben vom Gehalt des Mitarbeiters abziehen, wie in der SUMME angegeben Funktionsanweisung. Sie können dies überprüfen, indem Sie diese Daten manuell aus dem ersten Ergebnissatz für jeden Mitarbeiter berechnen, um sie validieren zu lassen.
Schlussfolgerung
Wir haben mehrere Anwendungsfälle der SQL SUM-Funktion mit anderen Klauseln untersucht. Moderne digitale Tools für SQL-Server-Spezialisten können diese Aufgaben übrigens drastisch vereinfachen. Beispielsweise enthält dbForge SQL Complete eine Funktion, die aggregierte Funktionen aus der fertigen Ergebnismenge im SSMS-Ergebnisraster berechnen kann.
Sie können Ihre Lieblingstipps zur SQL SUM-Funktion teilen. Sie können gerne den Kommentarbereich verwenden.