SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Optimieren Sie Ihre Avg()-Ergebnisse in SQLite mit dem Schlüsselwort DISTINCT

Wenn Sie über avg() Bescheid wissen Funktion in SQLite wissen Sie wahrscheinlich, dass sie den Durchschnitt aller Nicht-NULL X zurückgibt innerhalb einer Gruppe.

Aber wussten Sie, dass Sie den DISTINCT hinzufügen können? Schlüsselwort zu dieser Funktion?

Wenn Sie den DISTINCT hinzufügen Schlüsselwort, avg() berechnet seine Ergebnisse nur auf der Grundlage eindeutiger Werte. Dies ist im Wesentlichen dasselbe wie das Entfernen doppelter Werte und das anschließende Berechnen des Durchschnitts aus den verbleibenden Werten.

Syntax

Um den DISTINCT zu verwenden Schlüsselwort, fügen Sie es einfach als erstes Argument ein.

So:

avg(DISTINCT X)

Wobei X ist der Spaltenname, für den Sie den Durchschnitt berechnen.

Beispiel

Nehmen Sie die folgende Tabelle namens 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     

Wenn ich ein normales avg() ausführe in der Preisspalte:

SELECT avg(Price) FROM Products;

Hier ist, was ich bekomme:

45.2066666666667

Aber wenn ich einen DISTINCT ausführe Abfrage:

SELECT avg(DISTINCT Price) FROM Products;

Ich verstehe:

62.81

In diesem Fall ändert es also das Ergebnis ganz erheblich.

Nur um das klarzustellen, hier sind sie Seite an Seite:

SELECT 
 avg(Price) AS "Non-Distinct",
 avg(DISTINCT Price) AS "Distinct"
FROM Products;

Ergebnis:

Non-Distinct      Distinct  
----------------  ----------
45.2066666666667  62.81     

Wie Sie sich wahrscheinlich vorstellen können, verwenden Sie den DISTINCT Stichwort mit avg() könnte die Ergebnisse enorm verfälschen, besonders wenn es viele Duplikate an einem Ende des Bereichs, aber nicht viele Duplikate am anderen Ende gibt.