sql >> Database >  >> RDS >> SQLite

Tweak uw Avg()-resultaten in SQLite met het DISTINCT-sleutelwoord

Als je iets weet over de avg() functie in SQLite, weet je waarschijnlijk dat het het gemiddelde retourneert van alle niet-NULL-X binnen een groep.

Maar wist je dat je de DISTINCT . kunt toevoegen trefwoord voor deze functie?

Als u de DISTINCT . toevoegt trefwoord, avg() berekent de resultaten alleen op basis van verschillende waarden. Dit is in wezen hetzelfde als het verwijderen van dubbele waarden en vervolgens het gemiddelde berekenen van de resterende waarden.

Syntaxis

Om de DISTINCT . te gebruiken zoekwoord, voeg je het gewoon in als het eerste argument.

Zoals dit:

avg(DISTINCT X)

Waar X is de kolomnaam waarvoor u het gemiddelde berekent.

Voorbeeld

Neem de volgende tabel genaamd 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     

Als ik een normale avg() . uitvoer in de kolom Prijs:

SELECT avg(Price) FROM Products;

Dit is wat ik krijg:

45.2066666666667

Maar als ik een DISTINCT vraag:

SELECT avg(DISTINCT Price) FROM Products;

Ik krijg dit:

62.81

Dus in dit geval verandert het het resultaat behoorlijk.

Voor de duidelijkheid, hier staan ​​ze naast elkaar:

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

Resultaat:

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

Zoals u zich waarschijnlijk kunt voorstellen, gebruikt u de DISTINCT zoekwoord met avg() kan de resultaten enorm scheeftrekken, vooral als er veel duplicaten zijn aan de ene kant van het bereik, maar niet veel duplicaten aan de andere kant.


  1. SQLRecoverableException:I/O-uitzondering:verbinding opnieuw instellen

  2. Datum ontleden in MySQL

  3. CONCAT() Functie in Oracle

  4. De wizard Offline reorg gebruiken