SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Popraw swoje wyniki Avg() w SQLite za pomocą słowa kluczowego DISTINCT

Jeśli wiesz o avg() w SQLite, prawdopodobnie zdajesz sobie sprawę, że zwraca średnią wszystkich niezerowych X w grupie.

Ale czy wiesz, że możesz dodać DISTINCT? słowo kluczowe do tej funkcji?

Jeśli dodasz DISTINCT słowo kluczowe, avg() obliczy swoje wyniki wyłącznie na podstawie odrębnych wartości. Jest to zasadniczo to samo, co usuwanie zduplikowanych wartości, a następnie obliczanie średniej pozostałych wartości.

Składnia

Aby użyć DISTINCT słowo kluczowe, po prostu wstawiasz je jako pierwszy argument.

Tak:

avg(DISTINCT X)

Gdzie X to nazwa kolumny, dla której obliczasz średnią.

Przykład

Weź poniższą tabelę o nazwie 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     

Jeśli uruchomię normalną avg() w kolumnie Cena:

SELECT avg(Price) FROM Products;

Oto, co otrzymuję:

45.2066666666667

Ale jeśli uruchomię DISTINCT zapytanie:

SELECT avg(DISTINCT Price) FROM Products;

Rozumiem:

62.81

Więc w tym przypadku zmienia to dość znacznie wynik.

Żeby było jasne, oto są obok siebie:

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

Wynik:

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

Jak zapewne możesz sobie wyobrazić, używając DISTINCT słowo kluczowe z avg() może ogromnie zniekształcić wyniki, zwłaszcza jeśli na jednym końcu zakresu jest wiele duplikatów, ale na drugim końcu jest niewiele.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. aktualizowanie i kompaktowanie bazy danych sqlite w systemie Android

  2. 2 przykładowe bazy danych dla SQLite

  3. Kiedy powinienem zamknąć kursor i db?

  4. Jak zaktualizować istniejące dane za pomocą SQLite

  5. Dlaczego czas trwania jest NULL dla zdarzenia cyklicznego w Androidzie?