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.