sql >> Databáze >  >> RDS >> SQLite

SQLite AVG

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


  1. Export dat dotazů SQL do Excelu

  2. Problém při porovnávání výsledku to_char(myDate, 'DAY') s řetězcem

  3. MySQL Performance Cheat Sheet

  4. Klauzule SQL WHERE porovnává hodnoty s koncovými mezerami