SQLite count()
funktionen kan användas för att returnera antalet rader i en resultatuppsättning.
Den kan också användas för att returnera antalet gånger en given kolumn inte är NULL i resultatuppsättningen.
Den kan användas på två sätt. Om du anger asterisken (*
) jokertecken, kommer det att returnera det totala antalet rader i gruppen. Om du anger namnet på en kolumn kommer den att returnera antalet gånger den kolumnen inte är NULL.
Syntax
Syntaxen ser ut så här:
count(X)
count(*)
Så i det här fallet, X
kan vara namnet på en kolumn och asterisken (*
) jokertecken används för att ange det totala antalet rader i gruppen.
Exempel:count(*)
Här är ett grundläggande exempel för att visa asterisk (*)-syntaxen för att returnera antalet rader i en tabell.
SELECT count(*) FROM Customer;
Resultat:
59
Jag körde den här frågan på Chinook-exempeldatabasen, och så visar det sig att det finns 59 rader i Kund bord.
Exempel:count(X)
I det här exemplet skickar jag namnet på en specifik kolumn i tabellen.
SELECT count(Fax) FROM Customer;
Resultat:
12
I det här fallet, Fax kolumnen har 12 icke-NULL-värden.
Med andra ord innehåller 47 rader ett NULL-värde i Fax kolumn.
Använda en WHERE-klausul
Resultatet av count()
beräknas efter någon WHERE
klausuler.
SELECT count(Fax)
FROM Customer
WHERE CustomerId <= 5;
Resultat:
2
I det här fallet fanns det bara två icke-NULL-värden i Fax kolumn i resultatuppsättningen.
Så här ser resultaten ut med returnerade kolumner (och utan att använda count()
funktion).
SELECT CustomerId, Fax
FROM Customer
WHERE CustomerId <= 5;
Resultat:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Så vi kan se att endast raderna 1 och 5 har icke-NULL-värden i Fax kolumn.
Med en LIMIT-klausul
Resultatet beräknas inte efter någon LIMIT
klausul.
SELECT count(Fax)
FROM Customer
LIMIT 5;
Resultat:
12
Men du kan göra något så här istället:
SELECT count(Fax)
FROM (SELECT Fax FROM Customer
LIMIT 5);
Resultat:
2
Grupperade resultat
Ett praktiskt användningsfall för count()
är att använda den i kombination med GROUP BY
sats, så att flera rader returneras – var och en representerar en grupp – med ett antal rader i den gruppen.
Här är ett exempel.
SELECT
ar.Name,
count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
LIMIT 10;
Resultat:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Det DISTINKTA sökordet
Du kan lägga till DISTINCT
nyckelord för att endast räkna distinkta värden. Du kan med andra ord ta bort dubbletter av värden i beräkningen.
För exempel på detta se Hur man tar bort dubbletter från SQLite Count()-resultat.