Als je iets weet over de avg()
functie in SQLite, weet je waarschijnlijk dat het het gemiddelde retourneert van alle niet-NULL-X binnen een groep.
Maar wist je dat je de DISTINCT
. kunt toevoegen trefwoord voor deze functie?
Als u de DISTINCT
. toevoegt trefwoord, avg()
berekent de resultaten alleen op basis van verschillende waarden. Dit is in wezen hetzelfde als het verwijderen van dubbele waarden en vervolgens het gemiddelde berekenen van de resterende waarden.
Syntaxis
Om de DISTINCT
. te gebruiken zoekwoord, voeg je het gewoon in als het eerste argument.
Zoals dit:
avg(DISTINCT X)
Waar X
is de kolomnaam waarvoor u het gemiddelde berekent.
Voorbeeld
Neem de volgende tabel genaamd 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
Als ik een normale avg()
. uitvoer in de kolom Prijs:
SELECT avg(Price) FROM Products;
Dit is wat ik krijg:
45.2066666666667
Maar als ik een DISTINCT
vraag:
SELECT avg(DISTINCT Price) FROM Products;
Ik krijg dit:
62.81
Dus in dit geval verandert het het resultaat behoorlijk.
Voor de duidelijkheid, hier staan ze naast elkaar:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Resultaat:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Zoals u zich waarschijnlijk kunt voorstellen, gebruikt u de DISTINCT
zoekwoord met avg()
kan de resultaten enorm scheeftrekken, vooral als er veel duplicaten zijn aan de ene kant van het bereik, maar niet veel duplicaten aan de andere kant.