I SQL Server, SUM()
aggregerad funktion returnerar summan av ett givet uttryck.
Den kan också användas för att returnera summan av alla distinkta (unika) värden i uttrycket.
SUM()
fungerar bara på numeriska kolumner. Nullvärden ignoreras.
Syntax
Syntaxen ser ut så här:
SUM ( [ ALL | DISTINCT ] expression )
Den kan också användas med en OVER
klausul:
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
Exempel
Anta att vi har en tabell som heter Products
med följande data:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products;
Resultat:
+------------+---------------------------------+----------------+ | 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 | +------------+---------------------------------+----------------+
Vi kan använda följande fråga för att få summan av alla priser.
SELECT SUM(ProductPrice)
FROM Products;
Resultat:
367.20
Här lagras prisinformation i ProductPrice
kolumnen, och så skickar vi det som ett argument till SUM()
funktion, som sedan beräknar summan och returnerar resultatet.
Nullvärden
SUM()
funktionen ignorerar nollvärden när den utför sin beräkning.
Om kolumnen innehåller nollvärden kan du se en varning som indikerar att nollvärden har eliminerats.
Till exempel, här är varningen som jag fick när jag körde exemplet ovan:
SELECT SUM(ProductPrice)
FROM Products;
Resultat:
+--------------------+ | (No column name) | |--------------------| | 367.20 | +--------------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Filtrerade resultat
SUM()
funktionen fungerar på raderna som returneras av frågan. Så om du filtrerar resultaten blir resultatet av SUM()
kommer att återspegla det.
SELECT SUM(ProductPrice)
FROM Products
WHERE VendorId = 1001;
Resultat:
78.72
I det här fallet är 78,72 summan av alla produkter som erbjuds av den angivna leverantören.
DISTINCT
Nyckelord
Du kan använda DISTINCT
nyckelord med SUM()
för att endast beräkna distinkta värden. Det vill säga, om det finns några dubbletter av värden, behandlas de som ett värde.
Exempel:
SELECT
SUM(ALL ProductPrice) AS "All",
SUM(DISTINCT ProductPrice) AS "Distinct"
FROM Products;
Resultat:
+--------+------------+ | All | Distinct | |--------+------------| | 367.20 | 341.21 | +--------+------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Vårt bord innehåller två artiklar med samma pris (vänsterskruvmejseln och högerskruvmejseln kostar båda 25,99). DISTINCT
sökord leder till att båda dessa värden behandlas som ett.
Fönsterfunktioner
SUM()
funktionen kan användas med en OVER
klausul för att skapa en fönsterfunktion. Se SQL SUM()
för nybörjare som ett exempel.