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