Dans MariaDB, le COUNT()
la fonction d'agrégation renvoie un décompte du nombre de valeurs non NULL d'une expression dans les lignes récupérées par un SELECT
déclaration.
Exemple de données
Supposons que nous ayons le tableau suivant :
SELECT *
FROM Pets;
Résultat :
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Les exemples suivants utiliseront le COUNT()
fonction lors de l'interrogation de cette table.
Exemple
Voici comment compter les lignes dans le tableau ci-dessus :
SELECT COUNT(*)
FROM Pets;
Résultat :
8
Cela nous indique qu'il y a 8 lignes dans le tableau. Nous le savons parce que nous avons utilisé le caractère générique astérisque (*
) pour spécifier toutes les lignes et toutes les colonnes.
Compter une colonne spécifique
Vous pouvez également spécifier une colonne à compter. Le COUNT()
la fonction ne compte que les non-NULL
résultats, donc si vous spécifiez une colonne qui contient NULL
valeurs, ces valeurs ne seront pas comptées.
Voici un exemple pour illustrer ce que je veux dire.
SELECT COUNT(DOB)
FROM Pets;
Résultat :
6
Dans ce cas, les Pets
table contient deux NULL
valeurs dans le DOB
colonne (deux animaux n'ont pas fourni leur date de naissance), et donc COUNT(DOB)
renvoie 6, au lieu de 8 lorsque nous utilisions COUNT(*)
.
La raison COUNT(*)
dans l'exemple précédent a renvoyé toutes les lignes, c'est parce que ces deux lignes l'ont fait avoir des données dans les autres colonnes.
Résultats filtrés
Le COUNT()
La fonction compte les lignes renvoyées par la requête. Donc, si vous filtrez les résultats, le résultat de COUNT()
reflétera cela.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Résultat :
2
Dans ce cas, il y a deux animaux de compagnie avec un nom de Fluffy. Par conséquent, deux lignes auraient été renvoyées par la requête, et le résultat de COUNT()
est 2
.
Compter des colonnes distinctes
Nous avons la possibilité d'ajouter le DISTINCT
mot-clé pour spécifier que seules des valeurs distinctes sont renvoyées (afin d'exclure les doublons) :
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Résultat :
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
Dans ce cas, même s'il y a huit PetName
valeurs, seules sept d'entre elles sont distinctes (deux sont des doublons - nous avons deux animaux appelés Fluffy).
Le HAVING
Article
Vous pouvez inclure COUNT()
dans plusieurs parties d'une requête. Ce n'est pas seulement limité au SELECT
liste.
Voici un exemple qui utilise COUNT()
à la fois dans le HAVING
clause et le SELECT
liste :
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Résultat :
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Voir SQL COUNT()
pour les débutants pour une explication plus détaillée de cet exemple, ainsi qu'un exemple d'utilisation de COUNT()
dans une fonction de fenêtre.