sql >> Databasteknik >  >> RDS >> SQLite

Hur SQLite Sum() fungerar

SQLite sum() funktion returnerar summan av alla icke-NULL-värden i en grupp.

Om det inte finns några icke-NULL-värden, returnerar det NULL.

Denna funktion låter dig i princip lägga ihop alla värden i en resultatuppsättning eller en tabell.

Exempel

Här är ett exempel för att demonstrera dess användning.

SELECT sum(Price) FROM Products;

Resultat:

738.22

Det här exemplet är förmodligen meningslöst om du inte kan se de faktiska värdena i tabellen.

Här är en fråga som returnerar alla rader i den tabellen.

SELECT * FROM Products;

Resultat:

ProductId   ProductName            Price     
----------  ---------------------  ----------
1           Blue Widgets (6 Pack)  389.45    
2           Widget Holder          139.5     
3           Widget Opener          89.27     
4           Foobar Set             120.0     
5           Red Widget                    

Alltså sum() funktionen lade helt enkelt till alla värden i Pris kolumn.

Observera att den sista radens pris är NULL. Det är ok. sum() funktionen lägger helt enkelt till alla icke-NULL-värden.

NULL-värden

Om det inte finns några icke-NULL-värden är resultatet NULL.

SELECT sum(Price) 
FROM Products
WHERE ProductId = 5;

Resultat:

      

(Detta är avsiktligt tomt, eftersom det returnerade NULL).

Detta skiljer sig från hur SQLite total() funktionen behandlar NULL-värden (den returnerar 0,0). Båda sum() och total() gör samma sak, förutom denna skillnad.

Mindre resultatuppsättning

Det första exemplet lade till alla rader i tabellen. Men det behöver inte vara hela bordet. Som framgår av exemplet "NULL" kan du också använda en WHERE sats för att lägga till en delmängd av värden i tabellen.

Här är ett annat exempel som använder en WHERE klausul.

SELECT sum(Price) 
FROM Products
WHERE ProductId < 3;

Resultat:

528.95

Den här gången lägger det till icke-NULL-värden, så jag får ett icke-NULL-resultat.

Här är en annan som filtrerar efter samma kolumn som jag lägger till.

SELECT sum(Price) 
FROM Products
WHERE Price > 100;

Resultat:

648.95

Indata som inte är heltal

Om någon indata varken är ett heltal eller NULL så sum() returnerar ett flyttalsvärde som kan vara en approximation av den sanna summan.

Du kan få några oväntade resultat i sådana fall.

Nedan är ett exempel som försöker lägga till ett gäng faxnummer.

Låt oss först titta på listan över faxnummer.

SELECT Fax FROM Customer 
WHERE Fax IS NOT NULL;

Resultat:

Fax               
------------------
+55 (12) 3923-5566
+420 2 4172 5555  
+55 (11) 3033-4564
+55 (11) 3055-8131
+55 (21) 2271-7070
+55 (61) 3363-7855
+1 (780) 434-5565 
+1 (604) 688-8756 
+1 (650) 253-0000 
+1 (425) 882-8081 
+1 (212) 221-4679 
+1 (408) 996-1011 

Nu är det här vad som händer om jag försöker lägga till dem.

SELECT sum(Fax) 
FROM Customer;

Resultat:

701.0 

I det här fallet verkar det ha lagt till alla prefix.

Här är vad som händer om jag använder sum() på en kolumn av strängar.

SELECT sum(ProductName) 
FROM Products;

Resultat:

0.0

Det DISTINKTA sökordet

Du kan lägga till DISTINCT nyckelord för att bara lägga till distinkta värden. För att göra detta, använd sum(DISTINCT X) där X är kolumnnamnet.

Se Hur man lägger till just de distinkta värdena med SQLite Sum() för ett exempel.


  1. RR vs YY i Oracle

  2. Använder 'case expression kolumn' i where-satsen

  3. Introducerar ny funktion - Spotlight Cloud Reports

  4. Vårdata @CreatedDate-kommentaren fungerar inte för mig