sql >> Database teknologi >  >> RDS >> SQLite

Juster dine Avg()-resultater i SQLite med DISTINCT-søgeordet

Hvis du kender til avg() funktion i SQLite, er du sikkert klar over, at den returnerer gennemsnittet af alle ikke-NULL X inden for en gruppe.

Men vidste du, at du kan tilføje DISTINCT nøgleord til denne funktion?

Hvis du tilføjer DISTINCT søgeord, avg() vil kun beregne sine resultater baseret på forskellige værdier. Dette er i det væsentlige det samme som at fjerne duplikerede værdier og derefter beregne gennemsnittet af de resterende værdier.

Syntaks

For at bruge DISTINCT søgeord, indsætter du det blot som det første argument.

Sådan:

avg(DISTINCT X)

Hvor X er kolonnenavnet, som du beregner gennemsnittet for.

Eksempel

Tag følgende tabel kaldet 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     

Hvis jeg kører en normal avg() i kolonnen Pris:

SELECT avg(Price) FROM Products;

Her er, hvad jeg får:

45.2066666666667

Men hvis jeg kører en DISTINCT forespørgsel:

SELECT avg(DISTINCT Price) FROM Products;

Jeg forstår dette:

62.81

Så i dette tilfælde ændrer det resultatet ganske betragteligt.

Bare for at være klar, her er de side om side:

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

Resultat:

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

Som du sikkert kan forestille dig, ved at bruge DISTINCT søgeord med avg() kunne skævvride resultaterne enormt, især hvis der er mange dubletter i den ene ende af intervallet, men ikke mange dubletter i den anden ende.


  1. Hvordan bruger man parametre i en 'where value in...'-sætning?

  2. JSON-funktioner og -operatører i SQLite (fuld liste)

  3. Hjælp til MySQL-opdateringssag

  4. Dybdegående udforskning af Row Level Security