Pokud víte o avg()
funkce v SQLite, pravděpodobně víte, že vrací průměr všech jiných než NULL X v rámci skupiny.
Ale věděli jste, že můžete přidat DISTINCT
klíčové slovo pro tuto funkci?
Pokud přidáte DISTINCT
klíčové slovo, avg()
vypočítá své výsledky pouze na základě odlišných hodnot. To je v podstatě stejné jako odstranění duplicitních hodnot a pak výpočet průměru ze zbývajících hodnot.
Syntaxe
Chcete-li použít DISTINCT
klíčové slovo, jednoduše jej vložíte jako první argument.
Takhle:
avg(DISTINCT X)
Kde X
je název sloupce, pro který počítáte průměr.
Příklad
Vezměte si následující tabulku nazvanou 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
Pokud spustím normální avg()
ve sloupci Cena:
SELECT avg(Price) FROM Products;
Zde je to, co dostanu:
45.2066666666667
Ale když spustím DISTINCT
dotaz:
SELECT avg(DISTINCT Price) FROM Products;
Chápu toto:
62.81
Takže v tomto případě to dost podstatně mění výsledek.
Aby bylo jasno, tady jsou vedle sebe:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Výsledek:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Jak si pravděpodobně dokážete představit, pomocí DISTINCT
klíčové slovo s avg()
může výrazně zkreslit výsledky, zvláště pokud je na jednom konci rozsahu mnoho duplikátů, ale na druhém konci není mnoho duplikátů.