Se conosci il avg()
funzione in SQLite, probabilmente saprai che restituisce la media di tutti i non NULL X all'interno di un gruppo.
Ma lo sapevi che puoi aggiungere il DISTINCT
parola chiave per questa funzione?
Se aggiungi il DISTINCT
parola chiave, avg()
calcolerà i suoi risultati solo sulla base di valori distinti. Questo è essenzialmente lo stesso che rimuovere i valori duplicati e quindi calcolare la media sui valori rimanenti.
Sintassi
Per utilizzare il DISTINCT
parola chiave, è sufficiente inserirla come primo argomento.
In questo modo:
avg(DISTINCT X)
Dove X
è il nome della colonna per cui stai calcolando la media.
Esempio
Prendi la seguente tabella chiamata 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
Se eseguo un normale avg()
nella colonna Prezzo:
SELECT avg(Price) FROM Products;
Ecco cosa ottengo:
45.2066666666667
Ma se eseguo un DISTINCT
domanda:
SELECT avg(DISTINCT Price) FROM Products;
Ho questo:
62.81
Quindi in questo caso cambia notevolmente il risultato.
Tanto per essere chiari, eccoli fianco a fianco:
SELECT
avg(Price) AS "Non-Distinct",
avg(DISTINCT Price) AS "Distinct"
FROM Products;
Risultato:
Non-Distinct Distinct ---------------- ---------- 45.2066666666667 62.81
Come probabilmente puoi immaginare, utilizzando il DISTINCT
parola chiave con avg()
potrebbe alterare enormemente i risultati, soprattutto se ci sono molti duplicati a un'estremità dell'intervallo, ma non molti duplicati all'altra estremità.