sql >> Database >  >> RDS >> SQLite

SQLite AVG

Samenvatting :in deze tutorial leer je hoe je de SQLite AVG . gebruikt functie om de gemiddelde waarde van een reeks waarden te berekenen.

Inleiding tot de SQLite AVG-functie

De AVG functie is een geaggregeerde functie die de gemiddelde waarde berekent van alle niet-NULL-waarden binnen een groep.

Het volgende illustreert de syntaxis van de AVG functie:

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

Standaard is de AVG functie gebruikt ALL clausule, of u die nu specificeert of niet. Dit betekent dat de AVG-functie alle niet-NULL-waarden aanneemt wanneer deze de gemiddelde waarde berekent.

Als u de gemiddelde waarde van afzonderlijke (of unieke) waarden wilt berekenen, moet u de clausule DISTINCT expliciet in expressie opgeven.

Als een kolom gemengde gegevenstypen opslaat, zoals geheel getal, reëel, BLOB en tekst, SQLite AVG functie interpreteert de BLOB die er niet uitziet als een getal als nul (0).

De waarde van de AVG functie is altijd een drijvende-kommawaarde of een NULL waarde. De AVG functie retourneert alleen een NULL waarde als en alleen als alle waarden in de groep zijn NULL waarden.

U kunt een snelle test doen om te zien hoe de SQLite-functie werkt met verschillende gegevenstypen.

Maak eerst een nieuwe tabel met de naam avg_tests met behulp van de volgende verklaring:

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

Probeer het

Voeg vervolgens enkele gemengde waarden toe aan de avg_tests tafel.

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)

Probeer het

Vraag vervolgens gegevens op uit de avg_tests tafel.

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

Probeer het

Daarna kunt u de AVG . gebruiken functie om het gemiddelde te berekenen van de eerste vier rijen die alleen numerieke waarden bevatten.

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

Probeer het

Pas ten slotte de AVG . toe functie voor alle waarden in de val kolom van de avg_tests tafel.

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

Probeer het

Je hebt 9 rijen in de avg_tests tafel. De rij 7 is NULL . Daarom wordt bij het berekenen van het gemiddelde de AVG functie negeert het en neemt 8 rijen mee in de berekening.

De eerste vier rijen zijn de gehele en reële waarden:1,2, 10,1 en 20,5. De SQLite AVG-functie gebruikt die waarden in de berekening.

De 5e en 6e rij zijn teksttype omdat we de als 'B' en '8' hebben ingevoegd. Omdat 8 op een getal lijkt, interpreteert SQLite B als 0 en '8' als 8.

De 8e en 9e rij zijn BLOB typen die niet op getallen lijken, daarom interpreteert SQLite deze waarden als 0.

De AVG(cal) uitdrukking gebruikt de volgende formule:

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

Laten we eens kijken hoe de DISTINCT clausule werkt.

Voeg eerst een nieuwe rij toe aan de avg_tests tabel met een waarde bestaat al.

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

Probeer het

Ten tweede, pas de AVG . toe functie zonder DISTINCT clausule:

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

Probeer het

Voeg ten derde de DISTINCT . toe clausule aan de AVG functie:

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

Probeer het

Omdat de avg_tests tabel heeft twee rijen met dezelfde waarde 10.1, de AVG(DISTINCT) neemt slechts die ene rij voor berekening. Daarom heb je een ander resultaat.

SQLite AVG functie praktijkvoorbeelden

We gebruiken de tracks tabel in de voorbeelddatabase voor de demonstratie.

Om de gemiddelde lengte van alle tracks in milliseconden te berekenen, gebruik je het volgende statement:

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

Probeer het

SQLite AVG-functie met GROUP BY clausule

Om de gemiddelde lengte van tracks voor elk album te berekenen, gebruikt u de AVG functie met de GROUP BY clausule.

Eerst de GROUP BY clausule groepeert een reeks nummers op albums. Vervolgens wordt de AVG functie berekent de gemiddelde lengte van de tracks voor elk album.

Zie de volgende verklaring.

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

Probeer het

SQLite AVG functie met INNER JOIN clausule voorbeeld

Om de albumtitel samen met de albumid te krijgen kolom, gebruik je de INNER JOIN-clausule in de bovenstaande instructie zoals de volgende vraag:

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)

Probeer het

Merk op dat we de ROUND . hebben gebruikt functie om de zwevende waarde af te ronden op 2 cijfers rechts van de komma.

SQLite AVG-functie met voorbeeld HAVING-clausule

U kunt ofwel de AVG functie of de alias van de kolom in de HAVING-component om groepen te filteren. De volgende verklaring geeft alleen de albums met een gemiddelde lengte tussen 100000 en 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)

Probeer het

In deze tutorial hebben we je laten zien hoe je de SQLite AVG . gebruikt functie om de gemiddelde waarden van niet-NULL-waarden in een groep te berekenen.


  1. Hibernate 5:- org.hibernate.MappingException:onbekende entiteit

  2. Bulksgewijs verzamelen en onmiddellijk uitvoeren in Oracle

  3. Hoe verander ik een PostgreSQL-tabel en maak ik een kolom uniek?

  4. Vereist om deel te nemen aan 2 tafels met hun FK's in een 3e tafel