I MariaDB er COUNT()
aggregeret funktion returnerer en optælling af antallet af ikke-NULL værdier af et udtryk i rækkerne hentet af en SELECT
erklæring.
Eksempel på data
Antag, at vi har følgende tabel:
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ølgende eksempler vil bruge COUNT()
funktion, når du forespørger i denne tabel.
Eksempel
Sådan tæller du rækkerne i ovenstående tabel:
SELECT COUNT(*)
FROM Pets;
Resultat:
8
Dette fortæller os, at der er 8 rækker i tabellen. Vi ved det, fordi vi brugte stjerne-jokertegnet (*
) for at angive alle rækker og alle kolonner.
Tæl en specifik kolonne
Du kan også angive en kolonne, der skal tælles. COUNT()
funktion tæller kun ikke-NULL
resultater, så hvis du angiver en kolonne, der indeholder NULL
værdier, vil disse værdier ikke blive talt med.
Her er et eksempel for at vise, hvad jeg mener.
SELECT COUNT(DOB)
FROM Pets;
Resultat:
6
I dette tilfælde er Pets
tabel indeholder to NULL
værdier i DOB
kolonne (to kæledyr har ikke oplyst deres fødselsdato), og så COUNT(DOB)
returnerer 6 i stedet for 8, når vi brugte COUNT(*)
.
Årsagen COUNT(*)
i det forrige eksempel returnerede alle rækker, fordi de to rækker gjorde har data i de andre kolonner.
Filtrerede resultater
COUNT()
funktion tæller rækkerne, der returneres af forespørgslen. Så hvis du filtrerer resultaterne, er resultatet af COUNT()
vil afspejle det.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Resultat:
2
I dette tilfælde er der to kæledyr med navnet Fluffy. Derfor ville to rækker være blevet returneret af forespørgslen og resultatet af COUNT()
er 2
.
Tæl forskellige kolonner
Vi har mulighed for at tilføje DISTINCT
nøgleord for at angive, at der kun returneres forskellige værdier (så det udelukker dubletter):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Resultat:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
I dette tilfælde, selvom der er otte PetName
værdier, kun syv af dem er forskellige (to er dubletter – vi har to kæledyr kaldet Fluffy).
HAVING
Klausul
Du kan inkludere COUNT()
i flere dele af en forespørgsel. Det er ikke kun begrænset til SELECT
liste.
Her er et eksempel, der bruger COUNT()
i både HAVING
klausulen og SELECT
liste:
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()
for begyndere for en mere detaljeret forklaring af dette eksempel, samt et eksempel på brug af COUNT()
i en vinduesfunktion.