SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite AVG

Резюме :в този урок ще научите как да използвате 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.2Code 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 в група.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да дам на нулевата позиция на spinner бърза стойност?

  2. Android SQLiteDB не завършва добавянето на стойности

  3. Причинено от:android.database.sqlite.SQLiteException:няма такава таблица:BOOK (код 1 SQLITE_ERROR)

  4. Базата данни не можа да се отвори в режим на четене/запис

  5. Как работи SQLite Char().