Резюме :в този урок ще научите как да използвате SQLite AVG
функция за изчисляване на средната стойност на набор от стойности.
Въведение във функцията AVG на SQLite
AVG
функцията е обобщена функция, която изчислява средната стойност на всички стойности, които не са NULL в рамките на група.
Следното илюстрира синтаксиса на AVG
функция:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
По подразбиране AVG
функцията използва ALL
клауза, независимо дали го посочите или не. Това означава, че функцията AVG ще приеме всички стойности, различни от NULL, когато изчислява средната стойност.
В случай, че искате да изчислите средната стойност на отделни (или уникални) стойности, трябва да посочите изрично клаузата DISTINCT в израза.
Ако колона съхранява смесени типове данни като цяло число, реално, BLOB и текст, SQLite AVG
функцията интерпретира BLOB, който не изглежда като число, като нула (0).
Стойността на AVG
функцията винаги е стойност с плаваща запетая или NULL
стойност. AVG
функцията връща само NULL
стойност ако и само ако всички стойности в групата са NULL
стойности.
Можете да направите бърз тест, за да видите как функцията SQLite работи с различни типове данни.
Първо създайте нова таблица с име avg_tests
използвайки следното изявление:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
След това вмъкнете някои смесени стойности в avg_tests
таблица.
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)
Опитайте го
След това потърсете данни от avg_tests
таблица.
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
След това можете да използвате AVG
функция за изчисляване на средната стойност на първите четири реда, които съдържат само числови стойности.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Накрая приложете AVG
функция за всички стойности в val
колона на avg_tests
таблица.
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Имате 9 реда в avg_tests
маса. Редът 7 е NULL
. Следователно, когато се изчислява средната стойност, AVG
функцията го игнорира и взема 8 реда в изчислението.
Първите четири реда са цели числа и реални стойности:1,2, 10.1 и 20.5. Функцията SQLite AVG използва тези стойности при изчислението.
5-ти и 6-ти ред са текстови, тъй като вмъкнахме като „B“ и „8“. Тъй като 8 изглежда като число, SQLite интерпретира B като 0 и „8“ като 8.
8-ми и 9-ти ред са BLOB
типове, които не изглеждат като числа, следователно SQLite интерпретира тези стойности като 0.
AVG(cal)
изразът използва следната формула:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Нека видим как DISTINCT
клаузата работи.
Първо поставете нов ред в avg_tests
таблица със стойност вече съществува.
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Второ, приложете AVG
функция без DISTINCT
клауза:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Трето, добавете DISTINCT
клауза към AVG
функция:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Тъй като avg_tests
таблицата има два реда със същата стойност 10.1, AVG(DISTINCT)
взема само един ред за изчисление. Следователно получавате различен резултат.
SQLite AVG
функционални практически примери
Ще използваме tracks
таблица в примерната база данни за демонстрацията.
За да изчислите средната дължина на всички песни в милисекунди, използвате следното изявление:
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
SQLite AVG функция с GROUP BY
клауза
За да изчислите средната дължина на песните за всеки албум, използвате AVG
функция с GROUP BY
клауза.
Първо, GROUP BY
клаузата групира набор от песни по албуми. След това AVG
функцията изчислява средната дължина на песните за всеки албум.
Вижте следното изявление.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
SQLite AVG
функция с INNER JOIN
пример за клауза
За да получите заглавието на албума заедно с albumid
колона, използвате клаузата INNER JOIN в горния израз като следната заявка:
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)
Опитайте го
Забележете, че използвахме ROUND
функция за закръгляване на плаващата стойност до 2 цифри вдясно от десетичната запетая.
SQLite AVG функция с пример за клауза HAVING
Можете да използвате или AVG
функция или псевдоним на нейната колона в клаузата HAVING за филтриране на групи. Следното твърдение получава само албумите, чиято средна дължина е между 100 000 и 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)
Опитайте го
В този урок ви показахме как да използвате SQLite AVG
функция за изчисляване на средните стойности на стойности, различни от NULL в група.