Podsumowanie :w tym samouczku dowiesz się, jak używać SQLite AVG funkcja do obliczenia średniej wartości zbioru wartości.
Wprowadzenie do funkcji SQLite AVG
AVG funkcja to funkcja agregująca, która oblicza średnią wartość wszystkich wartości innych niż NULL w grupie.
Poniższe ilustruje składnię AVG funkcja:
AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)
Domyślnie AVG funkcja używa ALL klauzulę, czy to określisz, czy nie. Oznacza to, że funkcja AVG przy obliczaniu wartości średniej przyjmie wszystkie wartości inne niż NULL.
Jeśli chcesz obliczyć średnią wartość odrębnych (lub unikalnych) wartości, musisz wyraźnie określić klauzulę DISTINCT w wyrażeniu.
Jeśli kolumna przechowuje mieszane typy danych, takie jak liczba całkowita, rzeczywista, BLOB i tekst, SQLite AVG funkcja interpretuje BLOB, który nie wygląda jak liczba, jako zero (0).
Wartość AVG funkcja jest zawsze wartością zmiennoprzecinkową lub NULL wartość. AVG funkcja zwraca tylko NULL wartość jeśli i tylko wtedy wszystkie wartości w grupie są NULL wartości.
Możesz wykonać szybki test, aby zobaczyć, jak funkcja SQLite działa z różnymi typami danych.
Najpierw utwórz nową tabelę o nazwie avg_tests używając następującego oświadczenia:
CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql) Wypróbuj
Następnie wstaw kilka mieszanych wartości do avg_tests tabela.
INSERT INTO avg_tests (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('8'),
('B'),
(NULL),
(x'0010'),
(x'0011');Code language: SQL (Structured Query Language) (sql) Wypróbuj
Następnie zapytaj o dane z avg_tests tabela.
SELECT rowid,
val
FROM avg_tests;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Następnie możesz użyć AVG funkcja do obliczenia średniej z pierwszych czterech wierszy zawierających tylko wartości liczbowe.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Na koniec zastosuj AVG funkcji do wszystkich wartości w val kolumna avg_tests tabela.
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Masz 9 wierszy w avg_tests stół. Wiersz 7 to NULL . Dlatego przy obliczaniu średniej AVG funkcja ignoruje to i bierze 8 wierszy do obliczeń.
Pierwsze cztery wiersze to wartości całkowite i rzeczywiste:1,2, 10,1 i 20,5. Funkcja SQLite AVG używa tych wartości w obliczeniach.
Piąty i szósty wiersz to wiersze tekstowe, ponieważ wstawiliśmy „B” i „8”. Ponieważ 8 wygląda jak liczba, dlatego SQLite interpretuje B jako 0, a „8” jako 8.
8 i 9 wiersz to BLOB typy, które nie wyglądają jak liczby, dlatego SQLite interpretuje te wartości jako 0.
AVG(cal) wyrażenie używa następującej formuły:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)
Zobaczmy, jak DISTINCT klauzula działa.
Najpierw wstaw nowy wiersz do avg_tests tabela z wartością już istnieje.
INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql) Wypróbuj
Po drugie, zastosuj AVG funkcja bez DISTINCT klauzula:
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Po trzecie, dodaj DISTINCT klauzula AVG funkcja:
SELECT
avg(DISTINCT val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Ponieważ avg_tests tabela ma dwa wiersze o tej samej wartości 10.1, AVG(DISTINCT) bierze do obliczeń tylko jeden wiersz. Dlatego uzyskałeś inny wynik.
SQLite AVG praktyczne przykłady funkcji
Użyjemy tracks tabeli w przykładowej bazie danych do demonstracji.
Aby obliczyć średnią długość wszystkich ścieżek w milisekundach, użyj następującej instrukcji:
SELECT
avg(milliseconds)
FROM
tracks;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Funkcja SQLite AVG z GROUP BY klauzula
Aby obliczyć średnią długość utworów dla każdego albumu, użyj AVG funkcja z GROUP BY klauzula.
Najpierw GROUP BY klauzula grupuje zestaw utworów według albumów. Następnie AVG funkcja oblicza średnią długość utworów dla każdego albumu.
Zobacz następujące oświadczenie.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Wypróbuj
SQLite AVG funkcja z INNER JOIN przykład klauzuli
Aby uzyskać tytuł albumu wraz z albumid kolumna, używasz klauzuli INNER JOIN w powyższej instrukcji, tak jak w następującym zapytaniu:
SELECT
tracks.AlbumId,
Title,
round(avg(Milliseconds), 2) avg_length
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid;Code language: SQL (Structured Query Language) (sql) Wypróbuj
Zauważ, że użyliśmy ROUND funkcja zaokrąglająca wartość zmiennoprzecinkową do 2 cyfr na prawo od przecinka dziesiętnego.
Funkcja SQLite AVG z przykładem klauzuli HAVING
Możesz użyć albo AVG funkcji lub alias jej kolumny w klauzuli HAVING do filtrowania grup. Poniższe stwierdzenie zawiera tylko albumy, których średnia długość wynosi od 100000 do 200000.
SELECT
tracks.albumid,
title,
round(avg(milliseconds),2) avg_leng
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid
HAVING
avg_leng BETWEEN 100000 AND 200000;Code language: SQL (Structured Query Language) (sql) Wypróbuj
W tym samouczku pokazaliśmy, jak używać SQLite AVG funkcja obliczania średnich wartości innych niż NULL w grupie.