I MariaDB, COUNT()
aggregerad funktion returnerar en räkning av antalet icke-NULL-värden för ett uttryck i raderna som hämtas av en SELECT
uttalande.
Exempeldata
Anta att vi har följande tabell:
SELECT *
FROM Pets;
Resultat:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Följande exempel kommer att använda COUNT()
funktion när du frågar den här tabellen.
Exempel
Så här räknar du raderna i tabellen ovan:
SELECT COUNT(*)
FROM Pets;
Resultat:
8
Detta säger oss att det finns 8 rader i tabellen. Vi vet det eftersom vi använde asterisk-jokertecknet (*
) för att ange alla rader och alla kolumner.
Räkna en specifik kolumn
Du kan också ange en kolumn som ska räknas. COUNT()
funktionen räknar endast icke-NULL
resultat, så om du anger en kolumn som innehåller NULL
värden, kommer dessa värden inte att räknas.
Här är ett exempel för att visa vad jag menar.
SELECT COUNT(DOB)
FROM Pets;
Resultat:
6
I det här fallet, Pets
Tabellen innehåller två NULL
värden i DOB
kolumnen (två husdjur har inte angett sitt födelsedatum) och så COUNT(DOB)
returnerar 6 istället för 8 när vi använde COUNT(*)
.
Orsaken COUNT(*)
i föregående exempel returnerade alla rader, beror på att de två raderna gjorde har data i de andra kolumnerna.
Filtrerade resultat
COUNT()
funktion räknar raderna som returneras av frågan. Så om du filtrerar resultaten blir resultatet av COUNT()
kommer att återspegla det.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Resultat:
2
I det här fallet finns det två husdjur med namnet Fluffy. Därför skulle två rader ha returnerats av frågan och resultatet av COUNT()
är 2
.
Räkna distinkta kolumner
Vi har möjlighet att lägga till DISTINCT
nyckelord för att ange att bara distinkta värden returneras (så att det utesluter dubbletter):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Resultat:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
I det här fallet, även om det finns åtta PetName
värden, bara sju av dem är distinkta (två är dubbletter – vi har två husdjur som heter Fluffy).
HAVING
Klausul
Du kan inkludera COUNT()
i flera delar av en fråga. Det är inte bara begränsat till SELECT
lista.
Här är ett exempel som använder COUNT()
i både HAVING
satsen och SELECT
lista:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Resultat:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Se SQL COUNT()
för nybörjare för en mer detaljerad förklaring av detta exempel, samt ett exempel på hur du använder COUNT()
i en fönsterfunktion.