SQLite har en funktion kaldet sum()
og en anden funktion kaldet total()
. Begge funktioner gør stort set det samme - de returnerer summen af alle ikke-NULL-værdier i en gruppe.
Men der er en subtil forskel mellem disse to funktioner.
Forskellen er den måde, de håndterer NULL-input på.
Forskellen
Det er her, disse to funktioner adskiller sig.
Hvis der ikke er nogen ikke-NULL-input rækker:
sum()
returnerer NULLtotal()
returnerer 0,0
Eksempel
Her er et eksempel til at demonstrere forskellen mellem SQLite sum()
og total()
funktioner.
SELECT
sum(NULL),
total(NULL);
Resultat:
sum(NULL) total(NULL) ---------- ----------- 0.0
Den første kolonne er tom, fordi den er NULL.
Hvorfor forskellen?
Grunden til at have to funktioner, der gør det samme bortset fra denne ene forskel er, at sum()
er fuldt ud i overensstemmelse med standarder. SQL-standarden kræver, at sum()
funktion returnerer NULL, når dens input er NULL.
At returnere NULL kan være i overensstemmelse med standarder, men det er ikke særlig nyttigt, hvis du forventer et nummer.
total()
funktion er derfor blevet leveret som et mere nyttigt alternativ til sum()
.
Du kan vælge, hvilken funktion du foretrækker at bruge, afhængigt af hvordan du vil have funktionen til at håndtere NULL-værdier (og hvor standard-kompatibel du foretrækker at være).
Din beslutning kan også være påvirket af, hvor bærbar du ønsker, at din kode skal være. sum() ser ud til at være mere almindeligt brugt funktionsnavn i andre større DBMS'er.