sql >> Database teknologi >  >> RDS >> SQLite

SQLite AVG

Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite AVG funktion til at beregne gennemsnitsværdien af ​​et sæt værdier.

Introduktion til SQLite AVG-funktion

AVG funktion er en aggregeret funktion, der beregner gennemsnitsværdien af ​​alle ikke-NULL-værdier inden for en gruppe.

Det følgende illustrerer syntaksen for AVG funktion:

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

Som standard er AVG funktion bruger ALL klausul, uanset om du angiver det eller ej. Det betyder, at AVG-funktionen tager alle ikke-NULL-værdier, når den beregner gennemsnitsværdien.

Hvis du ønsker at beregne gennemsnitsværdien af ​​distinkte (eller unikke) værdier, skal du specificere DISTINCT-udtrykket eksplicit i udtryk.

Hvis en kolonne gemmer blandede datatyper såsom heltal, reelt, BLOB og tekst, SQLite AVG funktion fortolker den BLOB, der ikke ligner et tal, som nul (0).

Værdien af ​​AVG funktion er altid en flydende kommaværdi eller en NULL værdi. AVG funktion returnerer kun en NULL værdi hvis og kun hvis alle værdier i gruppen er NULL værdier.

Du kan tage en hurtig test for at se, hvordan SQLite-funktionen fungerer med forskellige datatyper.

Først skal du oprette en ny tabel med navnet avg_tests ved hjælp af følgende sætning:

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

Prøv det

Indsæt derefter nogle blandede værdier i avg_tests tabel.

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)

Prøv det

Forespørg derefter data fra avg_tests tabel.

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

Prøv det

Derefter kan du bruge AVG funktion til at beregne gennemsnittet af de første fire rækker, der kun indeholder numeriske værdier.

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

Prøv det

Til sidst skal du anvende AVG funktion til alle værdierne i val kolonne i avg_tests tabel.

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

Prøv det

Du har 9 rækker i avg_tests bord. Rækken 7 er NULL . Derfor, når gennemsnittet beregnes, er AVG funktion ignorerer det og tager 8 rækker ind i beregningen.

De første fire rækker er heltal og reelle værdier:1,2, 10,1 og 20,5. SQLite AVG-funktionen bruger disse værdier i beregningen.

Den 5. og 6. række er teksttype, fordi vi indsatte som 'B' og '8'. Fordi 8 ligner et tal, fortolker SQLite derfor B som 0 og '8' som 8.

Den 8. og 9. række er BLOB typer, der ikke ligner tal, derfor fortolker SQLite disse værdier som 0.

AVG(cal) udtryk bruger følgende formel:

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

Lad os se, hvordan DISTINCT klausul virker.

Indsæt først en ny række i avg_tests tabel med en værdi findes allerede.

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

Prøv det

For det andet skal du anvende AVG funktion uden DISTINCT klausul:

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

Prøv det

For det tredje skal du tilføje DISTINCT klausul til AVG funktion:

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

Prøv det

Fordi avg_tests tabellen har to rækker med samme værdi 10.1, AVG(DISTINCT) tager kun den ene række til beregning. Derfor fik du et andet resultat.

SQLite AVG funktion praktiske eksempler

Vi vil bruge tracks tabel i eksempeldatabasen til demonstrationen.

For at beregne den gennemsnitlige længde af alle spor i millisekunder, bruger du følgende sætning:

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

Prøv det

SQLite AVG-funktion med GROUP BY klausul

For at beregne den gennemsnitlige længde af numre for hvert album, bruger du AVG funktion med GROUP BY klausul.

Først GROUP BY klausul grupperer et sæt numre efter album. Derefter AVG funktionen beregner den gennemsnitlige længde af numre for hvert album.

Se følgende erklæring.

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

Prøv det

SQLite AVG funktion med INNER JOIN klausuleksempel

For at få albumtitlen sammen med albumid kolonne, bruger du INNER JOIN-sætningen i ovenstående sætning som følgende forespørgsel:

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)

Prøv det

Bemærk, at vi brugte ROUND funktion til at afrunde den flydende værdi til 2 cifre til højre for decimaltegnet.

SQLite AVG-funktion med HAVING-sætningseksempel

Du kan bruge enten AVG funktion eller dens kolonnes alias i HAVING-sætningen for at filtrere grupper. Følgende erklæring får kun de albums, hvis gennemsnitlige længde er mellem 100000 og 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)

Prøv det

I denne vejledning har vi vist dig, hvordan du bruger SQLite AVG funktion til at beregne gennemsnitsværdierne af ikke-NULL værdier i en gruppe.


  1. Hvordan OPDATERE en kolonne ved hjælp af en anden kolonne i en anden tabel? SQL-fejl:ORA-00933:SQL-kommando blev ikke afsluttet korrekt

  2. MINUTE() Eksempler – MySQL

  3. SQL-opdatering fra en tabel til en anden baseret på et ID-match

  4. Datakvalitet og uklar søgning