Jeśli wiesz o avg() w SQLite, prawdopodobnie zdajesz sobie sprawę, że zwraca średnią wszystkich niezerowych X w grupie.
Ale czy wiesz, że możesz dodać DISTINCT? słowo kluczowe do tej funkcji?
Jeśli dodasz DISTINCT słowo kluczowe, avg() obliczy swoje wyniki wyłącznie na podstawie odrębnych wartości. Jest to zasadniczo to samo, co usuwanie zduplikowanych wartości, a następnie obliczanie średniej pozostałych wartości.
Składnia
Aby użyć DISTINCT słowo kluczowe, po prostu wstawiasz je jako pierwszy argument.
Tak:
avg(DISTINCT X)
Gdzie X to nazwa kolumny, dla której obliczasz średnią.
Przykład
Weź poniższą tabelę o nazwie 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
Jeśli uruchomię normalną avg() w kolumnie Cena:
SELECT avg(Price) FROM Products; Oto, co otrzymuję:
45.2066666666667
Ale jeśli uruchomię DISTINCT zapytanie:
SELECT avg(DISTINCT Price) FROM Products; Rozumiem:
62.81
Więc w tym przypadku zmienia to dość znacznie wynik.
Żeby było jasne, oto są obok siebie:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products; Wynik:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Jak zapewne możesz sobie wyobrazić, używając DISTINCT słowo kluczowe z avg() może ogromnie zniekształcić wyniki, zwłaszcza jeśli na jednym końcu zakresu jest wiele duplikatów, ale na drugim końcu jest niewiele.