sql >> Databasteknik >  >> RDS >> SQLite

SQLite AVG

Sammanfattning :i den här handledningen kommer du att lära dig hur du använder SQLite AVG funktion för att beräkna medelvärdet för en uppsättning värden.

Introduktion till SQLite AVG-funktion

AVG funktion är en aggregerad funktion som beräknar medelvärdet för alla icke-NULL-värden inom en grupp.

Följande illustrerar syntaxen för AVG funktion:

AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)

Som standard är AVG funktionen använder ALL klausul oavsett om du anger det eller inte. Det betyder att AVG-funktionen tar alla icke-NULL-värden när den beräknar medelvärdet.

Om du vill beräkna medelvärdet för distinkta (eller unika) värden måste du ange DISTINCT-satsen uttryckligen i uttryck.

Om en kolumn lagrar blandade datatyper som heltal, reellt, BLOB och text, SQLite AVG funktionen tolkar BLOBEN som inte ser ut som ett tal som noll (0).

Värdet på AVG funktion är alltid ett flyttal eller en NULL värde. AVG funktion returnerar bara en NULL värde om och endast om alla värden i gruppen är NULL värden.

Du kan ta ett snabbtest för att se hur SQLite-funktionen fungerar med olika datatyper.

Skapa först en ny tabell med namnet avg_tests med följande uttalande:

CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql)

Prova det

Därefter infogar du några blandade värden i avg_tests bord.

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)

Prova det

Fråga sedan data från avg_tests bord.

SELECT rowid,
       val
  FROM avg_tests;Code language: SQL (Structured Query Language) (sql)

Prova det

Efter det kan du använda AVG funktion för att beräkna medelvärdet av de första fyra raderna som endast innehåller numeriska värden.

SELECT
	avg(val)
FROM
	avg_tests
WHERE
	rowid < 5;Code language: SQL (Structured Query Language) (sql)

Prova det

Till sist, använd AVG funktion till alla värden i val kolumnen i avg_tests bord.

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Prova det

Du har 9 rader i avg_tests tabell. Rad 7 är NULL . Därför, vid beräkning av medelvärdet, AVG funktionen ignorerar det och tar 8 rader in i beräkningen.

De första fyra raderna är heltal och reella värden:1,2, 10,1 och 20,5. SQLite AVG-funktionen använder dessa värden i beräkningen.

Den 5:e och 6:e raden är texttyp eftersom vi infogade som 'B' och '8'. Eftersom 8 ser ut som ett tal, därför tolkar SQLite B som 0 och '8' som 8.

Den 8:e och 9:e raden är BLOB typer som inte ser ut som siffror, därför tolkar SQLite dessa värden som 0.

AVG(cal) uttryck använder följande formel:

AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)

Låt oss se hur DISTINCT klausul fungerar.

Först infogar du en ny rad i avg_tests Tabell med ett värde finns redan.

INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql)

Prova det

För det andra, använd AVG funktion utan DISTINCT klausul:

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Prova det

För det tredje, lägg till DISTINCT sats till AVG funktion:

SELECT
	avg(DISTINCT val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Prova det

Eftersom avg_tests tabellen har två rader med samma värde 10.1, AVG(DISTINCT) tar bara en rad för beräkning. Därför fick du ett annat resultat.

SQLite AVG funktion praktiska exempel

Vi kommer att använda tracks tabell i exempeldatabasen för demonstrationen.

För att beräkna medellängden för alla spår i millisekunder använder du följande sats:

SELECT
	avg(milliseconds)
FROM
	tracks;Code language: SQL (Structured Query Language) (sql)

Prova det

SQLite AVG-funktion med GROUP BY klausul

För att beräkna den genomsnittliga längden på spår för varje album använder du AVG funktion med GROUP BY klausul.

Först, GROUP BY klausul grupperar en uppsättning spår efter album. Sedan, AVG funktionen beräknar den genomsnittliga längden på spår för varje album.

Se följande uttalande.

SELECT
	albumid,
	avg(milliseconds)
FROM
	tracks
GROUP BY
	albumid;Code language: SQL (Structured Query Language) (sql)

Prova det

SQLite AVG funktion med INNER JOIN klausulexempel

För att få albumtiteln tillsammans med albumid kolumnen använder du INNER JOIN-satsen i ovanstående sats som följande fråga:

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)

Prova det

Lägg märke till att vi använde ROUND funktion för att runda av det flytande värdet till 2 siffror till höger om decimalkomma.

SQLite AVG-funktion med HAVING-satsexempel

Du kan använda antingen AVG funktion eller dess kolumns alias i HAVING-satsen för att filtrera grupper. Följande uttalande får bara de album vars genomsnittliga längd är mellan 100000 och 200000.

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)

Prova det

I den här handledningen har vi visat dig hur du använder SQLite AVG funktion för att beräkna medelvärdena för icke-NULL-värden i en grupp.


  1. Räkna dagar mellan två datum, exklusive helger (endast MySQL)

  2. FEL:Fel 1005:Kan inte skapa tabell (errnr:121)

  3. Relationell algebra

  4. Problem vid hämtning av poster med tom array