In SQL Server is de SUM()
aggregatiefunctie retourneert de som van een bepaalde uitdrukking.
Het kan ook worden gebruikt om de som van alle afzonderlijke (unieke) waarden in de uitdrukking te retourneren.
SUM()
werkt alleen op numerieke kolommen. Null-waarden worden genegeerd.
Syntaxis
De syntaxis gaat als volgt:
SUM ( [ ALL | DISTINCT ] expression )
Het kan ook worden gebruikt met een OVER
clausule:
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
Voorbeeld
Stel dat we een tabel hebben met de naam Products
met de volgende gegevens:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products;
Resultaat:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | NULL | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1001 | Right handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
We kunnen de volgende zoekopdracht gebruiken om de som van alle prijzen te krijgen.
SELECT SUM(ProductPrice)
FROM Products;
Resultaat:
367.20
Hier wordt prijsinformatie opgeslagen in de ProductPrice
kolom, en dus geven we dat door als argument aan de SUM()
functie, die vervolgens de som berekent en het resultaat retourneert.
Null-waarden
De SUM()
functie negeert null-waarden bij het uitvoeren van de berekening.
Als de kolom null-waarden bevat, ziet u mogelijk een waarschuwing die aangeeft dat null-waarden zijn verwijderd.
Hier is bijvoorbeeld de waarschuwing die ik kreeg bij het uitvoeren van het bovenstaande voorbeeld:
SELECT SUM(ProductPrice)
FROM Products;
Resultaat:
+--------------------+ | (No column name) | |--------------------| | 367.20 | +--------------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Gefilterde resultaten
De SUM()
functie werkt op de rijen die door de query worden geretourneerd. Dus als u de resultaten filtert, wordt het resultaat van SUM()
zal dat weerspiegelen.
SELECT SUM(ProductPrice)
FROM Products
WHERE VendorId = 1001;
Resultaat:
78.72
In dit geval is 78,72 de som van alle producten die door de opgegeven leverancier worden aangeboden.
De DISTINCT
Zoekwoord
U kunt de DISTINCT
. gebruiken zoekwoord met SUM()
om alleen verschillende waarden te berekenen. Dat wil zeggen, als er dubbele waarden zijn, worden deze als één waarde behandeld.
Voorbeeld:
SELECT
SUM(ALL ProductPrice) AS "All",
SUM(DISTINCT ProductPrice) AS "Distinct"
FROM Products;
Resultaat:
+--------+------------+ | All | Distinct | |--------+------------| | 367.20 | 341.21 | +--------+------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Onze tabel bevat twee artikelen met dezelfde prijs (de linkshandige schroevendraaier en de rechtshandige schroevendraaier kosten beide 25,99). De DISTINCT
trefwoord resulteert erin dat beide waarden als één worden behandeld.
Vensterfuncties
De SUM()
functie kan worden gebruikt met een OVER
clausule om een vensterfunctie te creëren. Zie SQL SUM()
voor beginners bijvoorbeeld.