SQL COUNT
omet parfois les valeurs nulles des résultats agrégés. Ce guide montre comment garantir que les comptes zéro sont inclus lors du comptage des enregistrements.
Considérons deux tableaux : person
et appointment
. Une personne peut avoir plusieurs rendez-vous, et le tableau appointment
comprend une colonne person_id
.
Le problème :
Une requête simple GROUP BY
pourrait manquer des personnes sans rendez-vous :
<code class="language-sql">SELECT person_id, COUNT(person_id) AS "number_of_appointments" FROM appointment GROUP BY person_id;</code>
La solution : JOINDRE À GAUCHE
Pour inclure les personnes sans rendez-vous, utilisez un LEFT JOIN
:
<code class="language-sql">SELECT p.person_id, COUNT(a.person_id) AS "number_of_appointments" FROM person p LEFT JOIN appointment a ON p.person_id = a.person_id GROUP BY p.person_id;</code>
Explication :
LEFT JOIN
garantit que toutes les lignes du tableau person
(le tableau de gauche) sont incluses dans le résultat, quelles que soient les correspondances dans le tableau appointment
.COUNT(a.person_id)
renvoie 0 (et non NULL, comme ce serait le cas avec COUNT(*)
).GROUP BY p.person_id
regroupe les résultats par identifiant de personne, reflétant avec précision le nombre de rendez-vous nuls.Cette approche garantit un décompte complet, incluant les individus sans rendez-vous associé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!