Ако знаете за avg()
функция в SQLite, вероятно сте наясно, че връща средната стойност от всички не-NULL X в рамките на група.
Но знаете ли, че можете да добавите DISTINCT
ключова дума за тази функция?
Ако добавите DISTINCT
ключова дума, avg()
ще изчисли своите резултати само въз основа на различни стойности. Това по същество е същото като премахване на дублиращи се стойности и след това изчисляване на средната стойност за останалите стойности.
Синтаксис
За да използвате DISTINCT
ключова дума, просто я вмъквате като първи аргумент.
Като това:
avg(DISTINCT X)
Където X
е името на колоната, за която изчислявате средната стойност.
Пример
Вземете следната таблица, наречена 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
Ако стартирам нормален avg()
в колоната Цена:
SELECT avg(Price) FROM Products;
Ето какво получавам:
45.2066666666667
Но ако стартирам DISTINCT
заявка:
SELECT avg(DISTINCT Price) FROM Products;
Разбрах това:
62.81
Така че в този случай това променя резултата доста значително.
Само за да е ясно, ето ги един до друг:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Резултат:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Както вероятно можете да си представите, с помощта на DISTINCT
ключова дума с avg()
може значително да изкриви резултатите, особено ако има много дубликати в единия край на диапазона, но не много дублирани в другия край.