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.2
Code 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.