Om du känner till avg()
funktion i SQLite är du förmodligen medveten om att den returnerar genomsnittet av alla icke-NULL X inom en grupp.
Men visste du att du kan lägga till DISTINCT
nyckelord till den här funktionen?
Om du lägger till DISTINCT
nyckelord, avg()
beräknar endast sina resultat baserat på distinkta värden. Detta är i huvudsak samma sak som att ta bort dubbletter av värden och sedan beräkna medelvärdet av de återstående värdena.
Syntax
För att använda DISTINCT
nyckelord, sätter du helt enkelt in det som det första argumentet.
Så här:
avg(DISTINCT X)
Där X
är kolumnnamnet som du beräknar genomsnittet för.
Exempel
Ta följande tabell som heter 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
Om jag kör en normal avg()
i kolumnen Pris:
SELECT avg(Price) FROM Products;
Det här är vad jag får:
45.2066666666667
Men om jag kör en DISTINCT
fråga:
SELECT avg(DISTINCT Price) FROM Products;
Jag förstår detta:
62.81
Så i det här fallet förändrar det resultatet ganska avsevärt.
Bara för att vara tydlig, här är de sida vid sida:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Resultat:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Som du säkert kan föreställa dig använder du DISTINCT
nyckelord med avg()
kan förvränga resultaten enormt, speciellt om det finns många dubbletter i ena änden av intervallet, men inte många dubbletter i andra änden.