Shrnutí :v tomto tutoriálu se naučíte používat SQLite AVG funkce pro výpočet průměrné hodnoty množiny hodnot.
Úvod do funkce SQLite AVG
AVG funkce je agregační funkce, která vypočítává průměrnou hodnotu všech hodnot jiných než NULL v rámci skupiny.
Následující text ilustruje syntaxi AVG funkce:
AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)
Ve výchozím nastavení AVG funkce používá ALL klauzule, zda ji specifikujete nebo ne. Znamená to, že funkce AVG při výpočtu průměrné hodnoty vezme všechny hodnoty, které nejsou NULL.
V případě, že chcete vypočítat průměrnou hodnotu odlišných (nebo jedinečných) hodnot, musíte ve výrazu explicitně specifikovat klauzuli DISTINCT.
Pokud sloupec ukládá smíšené datové typy, jako je integer, real, BLOB a text, SQLite AVG funkce interpretuje BLOB, který nevypadá jako číslo, jako nulu (0).
Hodnota AVG funkce je vždy hodnota s plovoucí desetinnou čárkou nebo NULL hodnota. AVG funkce vrací pouze NULL hodnota když a jen tehdy všechny hodnoty ve skupině jsou NULL hodnoty.
Můžete si udělat rychlý test, abyste viděli, jak funkce SQLite funguje s různými typy dat.
Nejprve vytvořte novou tabulku s názvem avg_tests pomocí následujícího příkazu:
CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql) Zkuste to
Dále vložte několik smíšených hodnot do avg_tests tabulka.
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) Zkuste to
Poté zadejte dotaz na data z avg_tests tabulka.
SELECT rowid,
val
FROM avg_tests;Code language: SQL (Structured Query Language) (sql) Zkuste to
Poté můžete použít AVG funkce pro výpočet průměru prvních čtyř řádků, které obsahují pouze číselné hodnoty.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;Code language: SQL (Structured Query Language) (sql) Zkuste to
Nakonec použijte AVG funkce na všechny hodnoty v val sloupce avg_tests tabulka.
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Zkuste to
V avg_tests máte 9 řádků stůl. Řádek 7 je NULL . Proto se při výpočtu průměru použije AVG funkce to ignoruje a vezme do výpočtu 8 řádků.
První čtyři řádky jsou celá a reálné hodnoty:1,2, 10,1 a 20,5. Funkce SQLite AVG používá tyto hodnoty ve výpočtu.
5. a 6. řádek jsou textového typu, protože jsme vložili jako „B“ a „8“. Protože 8 vypadá jako číslo, SQLite interpretuje B jako 0 a „8“ jako 8.
8. a 9. řádek jsou BLOB typy, které nevypadají jako čísla, proto SQLite interpretuje tyto hodnoty jako 0.
AVG(cal) výraz používá následující vzorec:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)
Podívejme se, jak DISTINCT doložka funguje.
Nejprve vložte nový řádek do avg_tests tabulka s hodnotou již existuje.
INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql) Zkuste to
Za druhé použijte AVG funkce bez DISTINCT klauzule:
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Zkuste to
Za třetí, přidejte DISTINCT klauzule do AVG funkce:
SELECT
avg(DISTINCT val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Zkuste to
Protože avg_tests tabulka má dva řádky se stejnou hodnotou 10.1, AVG(DISTINCT) bere pro výpočet pouze jeden řádek. Proto jste dostali jiný výsledek.
SQLite AVG praktické příklady funkcí
Použijeme tracks tabulky ve vzorové databázi pro ukázku.
Chcete-li vypočítat průměrnou délku všech stop v milisekundách, použijte následující příkaz:
SELECT
avg(milliseconds)
FROM
tracks;Code language: SQL (Structured Query Language) (sql) Zkuste to
Funkce SQLite AVG s GROUP BY klauzule
Chcete-li vypočítat průměrnou délku skladeb pro každé album, použijte AVG pomocí funkce GROUP BY doložka.
Nejprve GROUP BY klauzule seskupuje sadu skladeb podle alb. Poté AVG funkce vypočítá průměrnou délku skladeb pro každé album.
Viz následující prohlášení.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Zkuste to
SQLite AVG funkce pomocí INNER JOIN příklad klauzule
Chcete-li získat název alba společně s albumid použijete klauzuli INNER JOIN ve výše uvedeném příkazu, jako je následující dotaz:
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) Zkuste to
Všimněte si, že jsme použili ROUND funkce zaokrouhlení plovoucí hodnoty na 2 číslice vpravo od desetinné čárky.
Funkce SQLite AVG s příkladem klauzule HAVING
Můžete použít buď AVG funkce nebo alias jejího sloupce v klauzuli HAVING k filtrování skupin. Následující prohlášení obsahuje pouze alba, jejichž průměrná délka je mezi 100 000 a 200 000.
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) Zkuste to
V tomto tutoriálu jsme vám ukázali, jak používat SQLite AVG funkce pro výpočet průměrných hodnot jiných hodnot než NULL ve skupině.