Hvis du kender til avg()
funktion i SQLite, er du sikkert klar over, at den returnerer gennemsnittet af alle ikke-NULL X inden for en gruppe.
Men vidste du, at du kan tilføje DISTINCT
nøgleord til denne funktion?
Hvis du tilføjer DISTINCT
søgeord, avg()
vil kun beregne sine resultater baseret på forskellige værdier. Dette er i det væsentlige det samme som at fjerne duplikerede værdier og derefter beregne gennemsnittet af de resterende værdier.
Syntaks
For at bruge DISTINCT
søgeord, indsætter du det blot som det første argument.
Sådan:
avg(DISTINCT X)
Hvor X
er kolonnenavnet, som du beregner gennemsnittet for.
Eksempel
Tag følgende tabel kaldet Products
:
ProductId ProductName Price ---------- ------------- ---------- 1 Widget Holder 139.5 2 Blue Widget 10.0 3 Red Widget 10.0 4 Green Widget 10.0 5 Widget Stick 89.75 6 Foo Cap 11.99
Hvis jeg kører en normal avg()
i kolonnen Pris:
SELECT avg(Price) FROM Products;
Her er, hvad jeg får:
45.2066666666667
Men hvis jeg kører en DISTINCT
forespørgsel:
SELECT avg(DISTINCT Price) FROM Products;
Jeg forstår dette:
62.81
Så i dette tilfælde ændrer det resultatet ganske betragteligt.
Bare for at være klar, her er de side om side:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Resultat:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Som du sikkert kan forestille dig, ved at bruge DISTINCT
søgeord med avg()
kunne skævvride resultaterne enormt, især hvis der er mange dubletter i den ene ende af intervallet, men ikke mange dubletter i den anden ende.